黑马程序员_集合框架 Collection

本文深入讲解Java中的集合框架,包括List、Set等接口的具体实现,如ArrayList、LinkedList、HashSet及TreeSet的特点与应用场景,并探讨了泛型的使用及注意事项。
------- android培训 java培训 、期待与您交流! ----------

 

Collection
         |--List:元素是有序的,元素可以重复。因为该集合体系有索引。
                      |--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
                      |--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
                      |--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。


        |--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。、

                                Set集合的功能和Collection是一致的。
                      |--HashSet: 底层数据结构是哈希表。是线程不安全的。不同步。
                                            HashSet是如何保证元素唯一性的呢?
                                           是通过元素的两个方法,hashCode和equals来完成。
                                            如果元素的HashCode值相同,才会判断equals是否为true。
                                           如果元素的hashcode值不同,不会调用equals。

                                           注意,对于判断元素是否存在,以及删除等操作,

                                            依赖的方法是元素的hashcode和equals方法。

注意:如果对象存进了HashSet集合以后,把对象的哈希值改变了,则对象不能从原来集合中取出或删除,有可能会造成内存泄露。


                     |--TreeSet:可以对set集合中的元素进行排序。底层数据结构是二叉树。

                                           保证元素唯一性依据:conpareTo方法 return 0.

                                            TreeSet排序第一种方式:

                                           让元素自身具备比较性。元素需要实现ConpareTo方法。

                                            也叫做自然顺序或者默认排序。

                                           TreeSet的第二种排序方式:
                                            当元素自身不具备比较性时,或者具备的比较性不是所需要的。
                                            这时就需要让集合自身具备比较性。
                                             在集合初始化时,就有了比较方式。

                                             

                                       当 两种排序都存在时,以比较器为主。

                                       定义一个类,实现Comparator接口,覆盖compare方法。

 

------------------------------------------------------------------------

list集合:

方法:


 add(index,element);
 addAll(index,Collection);


 remove(index);


 set(index,element);

 get(index):
 subList(from,to);
 listIterator();
 int indexOf(obj):获取指定元素的位置。
 ListIterator listIterator();

 

凡是可以操作角标的方法都是list体系特有的方法。

List集合特有的迭代器。ListIterator是Iterator的子接口。

在迭代时,不可以通过集合对象的方法操作集合中的元素。
因为会发生ConcurrentModificationException异常。

所以,在迭代器时,只能用迭代器的放过操作元素,可是Iterator方法是有限的,
只能对元素进行判断,取出,删除的操作,
如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。

该接口只能通过List集合的listIterator方法获取。

-------------------------------------------------------

LinkedList集合:

LinkedList:特有方法:
addFirst();
addLast();

getFirst();
getLast();
获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException

removeFirst();
removeLast();
获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException

 

在JDK1.6出现了替代方法。

offerFirst();
offerLast();


peekFirst();
peekLast();
获取元素,但不删除元素。如果集合中没有元素,会返回null。

pollFirst();
pollLast();
获取元素,但是元素被删除。如果集合中没有元素,会返回null。

-----------------------------------------------------------------------

泛型:

泛型定义在方法上要放在返回值类型前面。

<?>表示任意类型。?占位符

泛型的限定;
? extends E: 可以接收E类型或者E的子类型。上限。
? super E: 可以接收E类型或者E的父类型。下限

静态方法不可以访问类上定义的泛型。因为类的泛型是要new对象的。静态不能访问非静态。

如果静态方法操作的应用类型不确定,可以将泛型定义在方法上。

 

 

------- android培训 java培训 、期待与您交流! ----------
乐播投屏是一款简单好用、功能强大的专业投屏软件,支持手机投屏电视、手机投电脑、电脑投电视等多种投屏方式。 多端兼容与跨网投屏:支持手机、平板、电脑等多种设备之间的自由组合投屏,且无需连接 WiFi,通过跨屏技术打破网络限制,扫一扫即可投屏。 广泛的应用支持:支持 10000+APP 投屏,包括综合视频、网盘与浏览器、美韩剧、斗鱼、虎牙等直播平台,还能将央视、湖南卫视等各大卫视的直播内容一键投屏。 高清流畅投屏体验:腾讯独家智能音画调校技术,支持 4K 高清画质、240Hz 超高帧率,低延迟不卡顿,能为用户提供更高清、流畅的视觉享受。 会议办公功能强大:拥有全球唯一的 “超级投屏空间”,扫码即投,无需安装。支持多人共享投屏、远程协作批注,PPT、Excel、视频等文件都能流畅展示,还具备企业级安全加密,保障会议资料不泄露。 多人互动功能:支持多人投屏,邀请好友加入投屏互动,远程也可加入。同时具备一屏多显、语音互动功能,支持多人连麦,实时语音交流。 文件支持全面:支持 PPT、PDF、Word、Excel 等办公文件,以及视频、图片等多种类型文件的投屏,还支持网盘直投,无需下载和转格式。 特色功能丰富:投屏时可同步录制投屏画面,部分版本还支持通过触控屏或电视端外接鼠标反控电脑,以及在投屏过程中用画笔实时标注等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值