今天这篇文章我们来总结下java中常用的集合他们的特点,区别以及使用场景,首先我们先通过一张图,认识下集合的框架构成,方便理解和记忆。


Java集合框架容器 java集合框架结构图_List

java常用集合框架图

(一)从图中可看到 Collection接口是集合框架的顶级接口,是Set和List的父接口,但不是Map的父接口。先来了解下Collection的方法。如图:


Java集合框架容器 java集合框架结构图_java_02

Collection的方法展示

Collection继承于Iterator,iterator()方法即为父类的方法。但是Collection的remove() 方法与Iterator()的方法有区别。

Collection的remove() 方法与Iterator()的方法的区别:

参数方面

Collection的remove(Object)方法,里面有参数。Iterator()没有

性能方面

Iterator()的remove()方法效率高于Collection的remove(Object)方法,因为Collection的remove(Object)要一个一个去遍历并找到,才能移除。

 

而Iterator的remove()方法结合next()方法,每隔一项删除一项,效率更高。

容错方面

在使用Collection的remove(Object)方法会报异常,报ConCurrentMOdifacationException。因为集合的个数与Iterator内部对象保持不一致。

在使用iterator的remove()方法不会报错,因为iterator内部的集合个数与集合的个数保持一致。

 

 

(二)List集合

ArrayList与LinkedList的区别:

ArrayList

LinkedList

查询速度快,添加删除速度慢

添加删除速度快,并且查询花销大,不适用于查询

数组结构

链表结构

 

Array与ArrayList的区别:

①ArrayList是Array的复杂版本

②长度方面:Array的长度固定不变,而ArrayList的长度是可变的。

③存储的数据类型方面:Array只能存储相同数据类型的文章,而ArrayList可以存储不同数据类型的数据。

 

数组   ——  List

Arrays.toList(数组);

List —— 数组

list.toArray();

 

(三)Map集合

HashSet 、TreeSet、LinkedHashSet区别:

可以从集合的使用场景区分:

①需要速度快的集合,使用HashSet

②需要集合有排序功能,使用TreeSet

③需要按照插入的顺序集合存储集合,使用LinkedHashSet

 

HashMap、TreeMap、LinkedHashMap区别(同上面三个的区别差不多):

①在Map集合中插入,删除和定位元素,使用HashMap

②需要集合有排序功能,使用TreeMap

③需要按照插入的顺序集合存储集合,使用LinkedHashMap

HashSet和HashMap的区别:

HashMap

HashSet

实现了Map接口

实现了Set接口

存储键值对,所以HashMap相对于HashSet较快。

存储对象,速度较慢

调用put()向map添加元素。HashMap使用key计算hashCode

调用add()向set添加元素。HashSet使用成员对象计算hashCode

 

(四)List、Set、Map之间的区别:

List

   Set

Map

继承Collection

继承Collection

没有继承Collection

可以允许空的元素

不允许空的元素

键值对存储,键必须唯一,但是值可以重复

可以插入多个null值

只允许一个null元素

键只允许一个null,键可以允许有多个null值

 

有序的容器

无序的容器

无序的容器

 

最后如果想要打乱一个集合中的元素,我总结了两种方法:

①调用collections.shuffle() 方法打乱顺序。

②或者利用for()循环,利用随机的下标。

好了,今天关于学习java的常用集合框架就分析到这里了,希望对各位有帮助。