Collection
Collection是Java标准库自带的java.util包提供的集合类。它是除Map外所有其他集合类的根接口。
Collection接口有 2 种子类型,List、Set,再下面是一些抽象类,最后是具体实现类,常用的有ArrayList、LinkedList、HashSet等等,结构如下图。
![9b06a40e271d0544882ca8ae11cd7afb.png](https://i-blog.csdnimg.cn/blog_migrate/82db800679a8e8503c2fcbe0e4a447b2.png)
一些 collection 允许有重复的元素,而另一些则不允许。
一些 collection 是有序的,而另一些则是无序的。
JDK 不提供此接口的任何直接实现,它提供更具体的子接口(如 Set 和 List)实现。此接口通常用来传递 collection,并在需要最大普遍性的地方操作这些 collection。
Java集合的设计有几个特点:
实现了接口和实现类相分离,例如,有序表的接口是List,具体的实现类有ArrayList,LinkedList等。
支持泛型,我们可以限制在一个集合中只能放入同一种数据类型的元素。
//Collection的Apiint size();boolean isEmpty();boolean contains(Object o);Iteratoriterator();Object[] toArray(); T[] toArray(T[] a);boolean add(E e);boolean remove(Object o);boolean containsAll(Collection> c);boolean addAll(Collection extends E> c);boolean removeAll(Collection> c);boolean retainAll(Collection> c);void clear();boolean equals(Object o);int hashCode();/**下面的函数从jdk1.8开始支持@since 1.8**/default boolean removeIf(Predicate super E> filter) { Objects.requireNonNull(filter); boolean removed = false; final Iterator each = iterator(); while (each.hasNext()) { if (filter.test(each.next())) { each.remove(); removed = true; } } return removed;}@Overridedefault Spliteratorspliterator() { return Spliterators.spliterator(this, 0);}default Streamstream() { return StreamSupport.stream(spliterator(), false);}default StreamparallelStream() { return StreamSupport.stream(spliterator(), true);}
Q & A
![cb66149611623577b82ed4c995a0a5bd.png](https://i-blog.csdnimg.cn/blog_migrate/f5da2dd7234506e5747ddcda3ca42bf3.jpeg)
韩梅梅
我还是不太懂集合,你能再解释下吗?
Collection是最基本的集合接口,所有实现Collection接口的类都必须提供两个标准的构造函数:无参构造函数用于创建一个空的Collection,有参数构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。
![2871e8713a5428b4460801366ecfb20b.png](https://i-blog.csdnimg.cn/blog_migrate/e74e8eb5d795058cd32d1b5da41929a8.jpeg)
李雷
![cb66149611623577b82ed4c995a0a5bd.png](https://i-blog.csdnimg.cn/blog_migrate/f5da2dd7234506e5747ddcda3ca42bf3.jpeg)
韩梅梅
哦.... 那如何访问Collection中的每一个元素?
Java访问集合总是通过统一的方式——迭代器(Iterator)来实现,它最明显的好处在于无需知道集合内部元素是按什么方式存储的。
不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个iterator,使用该iterator即可逐一访问Collection中每一个元素。
![2871e8713a5428b4460801366ecfb20b.png](https://i-blog.csdnimg.cn/blog_migrate/e74e8eb5d795058cd32d1b5da41929a8.jpeg)
李雷
![cb66149611623577b82ed4c995a0a5bd.png](https://i-blog.csdnimg.cn/blog_migrate/f5da2dd7234506e5747ddcda3ca42bf3.jpeg)
韩梅梅
emmmm.. 有点懂了,那Collection接口下的List实现类又分为LinkedList,ArrayList,是随便用哪个都可以吗?
....当然不是。
ArrayList本质是个数组,可以通过下标直接访问它的元素。而LinkedList是个双链表。
所以一般情况下,用ArrayList就可以了,如果涉及到频繁的插入和删除元素,这个时候考虑使用LinkedList,另外Java里面的Queue和Stack也是依赖LinkedList实现的。
![2871e8713a5428b4460801366ecfb20b.png](https://i-blog.csdnimg.cn/blog_migrate/e74e8eb5d795058cd32d1b5da41929a8.jpeg)
李雷
![cb66149611623577b82ed4c995a0a5bd.png](https://i-blog.csdnimg.cn/blog_migrate/f5da2dd7234506e5747ddcda3ca42bf3.jpeg)
韩梅梅
我这就去学习.......
![f14f0acc397c840dc8668f7cfef483d5.gif](https://i-blog.csdnimg.cn/blog_migrate/a6bcf59557f084657ef019a0a56e2cf4.gif)
分享、在看与点赞
只要你点,就会带来更多好运
![f14f0acc397c840dc8668f7cfef483d5.gif](https://i-blog.csdnimg.cn/blog_migrate/a6bcf59557f084657ef019a0a56e2cf4.gif)