🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 集合类基础接口 | 接口 | 描述 | | :---: | :--- | | Collection | 运行操作一组对象,集合层次结构顶部 | | Queue | 扩展Collection,只能从列表顶部删除元素 | | Deque | 扩展Queue以处理双端队列 | | List | 扩展Collection以处理序列 | | Set | 集合中的元素必须唯一 | | SortedSet | 已排序的集合 | | NavigableSet | 扩展SortedSet以基于最接近匹配原则检索元素 | ### ![](https://img.kancloud.cn/f2/dc/f2dc41caae0a8b9aeca7f4b228de0c84_1005x617.png) ### JAVA集合实现类 * ArrayList * LinkedList * ArrayDeque * HashSet * TreeSet * EnumSet * LinkedHashSet * PriorityQueue ### Collection重点关注API * Collection的创建:关注实现类的构造器 * boolean add\(E e\);此方法的实现决定了此方法的性能 * remove\(Object o\); * get\(index\) * Iterator<E> iterator\(\); * contains\(Object o\); ### 【知识点】 * Set存储的是不重复的对象,依据hashCode和equals进行判断,所以Set存储的对象必须重写这两个方法; * String重写了hashCode和equals方法,所以我们可以非常愉快地使用String对象作为key来使用; * ArrayList的subList结果不可强转成ArrayList,否则会抛出ClassCastException异常,即java.util.RandomAccessSubList can not be cast to java.util.ArrayList;subList返回的是ArrayList的内部类SubList,并不是ArrayList而是ArrayList的一个视图,对于SubList子列表的所有操作最终会反映到原列表上; * 在subList场景中,高度注意对原集合元素的增加或删除,均会导致子列表的遍历增加、删除产生ConcurrentModificationException异常; * 使用集合转数组的方法,必须使用集合的toArray\(T\[\]array\),传入一样的数组,大小就是list.size\(\);直接使用toArray无参方法存在问题,此方法返回值只能是Object\[\]类,若强转其它类型数组将出现ClassCastException错误; * 使用工具类Arrays.asList\(\)把数组转换成集合时,不能使用其修改集合相关的方法,它的add/remove/clear方法会抛出UnsupportedOperationException异常; ### 总结![](https://img.kancloud.cn/c9/de/c9dee21ac3520a00f31937c36335bc0b_1592x350.png)![](https://img.kancloud.cn/82/fc/82fcec481c267f188d0db0940c0bd128_850x195.png) ### List和Set的区别 1. List和Set之间很重要的一个区别是是否允许重复元素的存在,在List中允许插入重复的元素,而在Set中不允许重复元素存在,即使插入相同元素也会进行替换; 2. List和Set之间另外一个很重要的区别与元素先后存放顺序有关。List是有序集合,而Set是无序集合。List会保留元素插入时的顺序,也就是说之前插入的元素的索引要比之后插入的元素的索引要小。而Set不会保留插入时的顺序;【PS:ArrayList中使用对象数组来存储对象,在每次插入新的对象时会插入到size大小处;至于HashSet,前面说到是通过HashMap来实现的,存入的对象作为HashMap的key,如果key相同会替换value。当然,SortedSet(继承了Set接口)能够以指定的排序方式来保存元素】 3. List可以通过下标来访问,而Set不能 【知识点】 * java5.0增加了2种新的容器类型:Queue和BlockingQueue * java6增加了两种容器类型Deque和BlockingDeque,分别对Queue和BlockingQueue进行了扩展