今天这篇文章我们来总结下java中常用的集合他们的特点,区别以及使用场景,首先我们先通过一张图,认识下集合的框架构成,方便理解和记忆。
![](https://i-blog.csdnimg.cn/blog_migrate/5d90a9d9b0246c4d8dc5ff2eb3910030.png)
(一)从图中可看到 Collection接口是集合框架的顶级接口,是Set和List的父接口,但不是Map的父接口。先来了解下Collection的方法。如图:
![](https://i-blog.csdnimg.cn/blog_migrate/8b314847166ea143365b66d5d50d993a.png)
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的常用集合框架就分析到这里了,希望对各位有帮助。