Java集合框架总结

List集合要点总结

1. 集合框架的最顶层为Collection接口。

2.集合里存放的并不是对象的实体,而是对象实体的引用地址

3.集合可以通过迭代器(Iterator)来遍历元素,iterator()方法实际上是返回了集合中的一个内部类实例,该内部类实例实现了Iterator接口,并且可以直接访问存储在集合中的对象。

4. 关于Collection接口的两个重要子接口List和Set:

List:元素是有序的,并且可以有重复元素。

Set:元素是无序的,不可以有重复元素。

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

6.  List接口的三个重要实现类ArrayList,LinkedList,Vector。
ArrayList底层采用数组实现,查询操作会更快。
LinkedList底层采用双向链表实现,增删操作会更快。
Vector(已过时)底层实现同ArrayList,区别在于它是线程同步的,而ArrayList线程不同步。

   当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半

7.List集合判断元素是否相同(contains()判断),依据的是元素的equals()方法

 

Set集合要点总结:

1.Set接口:元素是无序的(存入和取出的顺序不一定一致),元素不可以重复。

2.HashSet底层数据结构是哈希表,且线程不安全。

3.HastSet中确定元素是否重复,首先判断元素的hashCode是否相同,如果相同,在调用equals()判断,如果返回true,则元素相同,否则视为不同。故在向集合添加元素时,如果重写元素equals()方法,hashCode()方法也建议被重写(add()|contains()|remove())。

4. ArrayList确定元素唯一性只依赖于equals()方法;
HashSet确定元素唯一性先判断hashCode是否相同,再判断equals()。

5. 向TreeSet集合中添加自定义对象时,因为无法比较被添加元素与集合中元素的大小,将抛出ClassCastException。此时可以在自定义对象中实现Comparable接口中的compareTo()方法来定义比较方式。

6.TreeSet底层采用二叉树数据结构。

7. TreeSet确定元素唯一性:判断元素compareTo()方法是否return0

8. 当元素自身不具备比较性,或者具备的比较性不是所需要的。可以向集合构造函数中传入一个比较器,该比较器实现Comparator接口并重写了compare(To1,To2)方法来进行添加元素时的比较。

9. 当两Comparable与Comparator都存在时,以Comparator比较器为主(推荐使用Comparator)。

10.Comparable与Comparator接口的异同:

   1)实现Comparable接口的类,似乎是预先知道该类将要进行排序,需要排序的类实现Comparable接口,是一种“静态绑定排序”。

   2)实现Comparator的类不需要,设计者无需事先为需要排序的类实现任何接口。

   3)Comparator接口无需改变排序类的内部,也就是说实现算法和数据分离,是一个良好的设计,是一种“动态绑定排序”。

11.LinkedHashSet,具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序),于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。(LinkedHashMap与HashMap的关系意思相同)

 

Map集合要点总结:

1. Map接口的三个重要实现类:
|--Hashtable:底层是哈希表数据结构,不允许存放nullnull值,线程同步。jdk1.0出现,效率较低。

|--HashMap:底层是哈希表数据结构,允许存放nullnull值,线程不同步
jdk1.2出现,替代Hashtable,效率高。
|--TreeMap:底层是二叉树结构,线程不同步,可以对键值进行排序。

2. Set集合底层实际上使用了Map集合。

3. 方法put(Kkey,V value)有返回值V,通过put(K key,V value)向Map集合添加元素时,如果同一个key值之前已存在对应的value,那么新添加的value将替换掉原有的value并将原有的value作为返回值返回。如果key之前不存在value,返回值为null

4.Map集合没有迭代器(Iterator),但提供了两个重要方法,keySet()和entrySet(),通过这两个Set集合的Iterator来获取每个元素。

5.entrySet返回Set<</span>Map.Entry>存储着Map集合中的键值对,Entry其实就是Map中的一个内部静态接口,实现了getValue(),getKey()setValue()方法来操作元素

6. HashMap底层实际上是数组与链表(Entry)的混合结构。当向HashMap中put一对键值时,它会根据key的hashCode值计算出一个位置,该位置就是此对象准备往数组中存放的位置。如果该位置没有对象存在,就将此对象直接放进数组当中;如果该位置已经有对象存在了,则顺着此存在的对象的链开始寻找(Entry类有一个Entry类型的next成员变量,指向了该对象的下一个对象),如果此链上有对象的话,再去使用equals方法进行比较,如果对此链上的所有对象的equals方法比较为false,则将该对象放到链表的头一个位置,然后将链表中头位置以前存在的那个对象链接到此对象的后面。

 

集合工具类:

1.       Collections类的所有方法都为静态的,提供了很多工具方法来操作集合。

2.       Collections.sort()有两个重载方法都可对List集合进行排序,后者可传入比较器参数进行排序。

3.       Collections.binarySearch()有两个重载方法,使用二分查找法查找指定元素索引,使用前List集合必须经过升序排序,如果没有找到指定元素,返回插入点-1。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值