java集合框架总结

时间:2023-02-17 16:17:54

Tag1:自己总结,如有什么问题,会及时更正。

Tag2:重点在于集合框架结构分析和底层数据结构实现原理。

一、集合框架结构图

java集合框架总结

二、分类分析

1、常用List总结

java集合框架总结

红色编号1:以上四个方法均直接或者间接继承自AbstractList,都可以储存相同数值。其中,ArrayList在实际运用中使用最多,LinkedList其次。其它两个基本不用。由于ArrayListLinkedList的结构特征,注定了它们的优缺点刚好相反,在实际应用中应根据它们的优缺点选择使用。另外,ArrayList的使用远远多于LinkedList

2、常用Set总结

java集合框架总结

浅蓝色编号2:以上三个set 集合均直接或者间接继承于AbstractSet方法,均不可以存储相同对象值。其中LinkedHashSet继承自HashSet,具有链表的结构,因此,有序。TreeSet有树形的结构,默认是升序排列,可以实现比较器接口,进行自定义排序。同样,TreeSet也可以实现比较器接口,进行自定义排序。HashSet没有不能排序(没有相关方法)。其中,HashSet最常用。

3、 常用 Map 总结

java集合框架总结

浅青色编号3HashMapHashSet具有一样的数据结构,同样不能排序,随机访问快的特点。LinkedHashMap继承自HashMap,有序。TreeMap具有树的结构,有序,可以实现比较器。特别注意:Hashtable Properties继承自Dictionary,和以上三个map继承自不同的父类,出现较早,线程安全,但基本已经不用。Properties多用于读写Java的配置文件。

常见的集合面试题(来源自网络)

1HashMapHashTable有何不同?

1HashMap允许keyvaluenull,而HashTable不允许。

2HashTable是同步的,而HashMap不是。所以HashMap适合单线程环境,HashTable适合多线程环境。

3)在Java1.4中引入了LinkedHashMapHashMap的一个子类,假如你想要遍历顺序,你很容易从HashMap转向LinkedHashMap,但是HashTable不是这样的,它的顺序是不可预知的。

4HashMap提供对keySet进行遍历,因此它是fail-fast的,但HashTable提供对keyEnumeration进行遍历,它不支持fail-fast

5)、HashTable被认为是个遗留的类,如果你寻求在迭代的时候修改Map,你应该使用CocurrentHashMap

2、如何决定选用HashMap还是TreeMap

对于在Map中插入、删除和定位元素这类操作,HashMap是最好的选择。然而,假如你需要对一个有序的key集合进行遍历,TreeMap是更好的选择。基于你的collection的大小,也许向HashMap中添加元素会更快,将map换为TreeMap进行有序key的遍历。

 

3ArrayListVector有何异同点?

ArrayListVector在很多时候都很类似。

1)两者都是基于索引的,内部由一个数组支持。

2)两者维护插入的顺序,我们可以根据插入顺序来获取元素。

3ArrayListVector的迭代器实现都是fail-fast的。

4ArrayListVector两者允许null值,也可以使用索引值对元素进行随机访问。

以下是ArrayListVector的不同点。

1Vector是同步的,而ArrayList不是。然而,如果你寻求在迭代的时候对列表进行改变,你应该使用CopyOnWriteArrayList

2ArrayListVector快,它因为有同步,不会过载。

ArrayList更加通用,因为我们可以使用Collections工具类轻易地获取同步列表和只读列表。

 

4ArrayListLinkedList有何区别? 

ArrayListLinkedList两者都实现了List接口,但是它们之间有些不同。

1ArrayList是由Array所支持的基于一个索引的数据结构,所以它提供对元素的随机访问,复杂度为O(1),但LinkedList存储一系列的节点数据,每个节点都与前一个和下一个节点相连接。所以,尽管有使用索引获取元素的方法,内部实现是从起始点开始遍历,遍历到索引的节点然后返回元素,时间复杂度为O(n),比ArrayList要慢。

2)与ArrayList相比,在LinkedList中插入、添加和删除一个元素会更快,因为在一个元素被插入到中间的时候,不会涉及改变数组的大小,或更新索引。

 (3LinkedListArrayList消耗更多的内存,因为LinkedList中的每个节点存储了前后节点的引用。

5Collections类是什么?

 Java.util.Collections是一个工具类仅包含静态方法,它们操作或返回集合。它包含操作集合的多态算法,返回一个由指定集合支持的新集合和其它一些内容。这个类包含集合框架算法的方法,比如折半搜索、排序、混编和逆序等。