.实现 linkedlist 类java_Java集合(1) Collection

Collection

CollectionJava标准库自带的java.util包提供的集合类。它是Map外所有其他集合类的根接口

Collection接口有 2 种子类型,List、Set,再下面是一些抽象类,最后是具体实现类,常用的有ArrayListLinkedListHashSet等等,结构如下图。

9b06a40e271d0544882ca8ae11cd7afb.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

韩梅梅

我还是不太懂集合,你能再解释下吗?

Collection是最基本的集合接口,所有实现Collection接口的类都必须提供两个标准的构造函数:无参构造函数用于创建一个空的Collection,有参数构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。

2871e8713a5428b4460801366ecfb20b.png

李雷

cb66149611623577b82ed4c995a0a5bd.png

韩梅梅

哦.... 那如何访问Collection中的每一个元素?

Java访问集合总是通过统一的方式——迭代器(Iterator)来实现,它最明显的好处在于无需知道集合内部元素是按什么方式存储的。

不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个iterator,使用该iterator即可逐一访问Collection中每一个元素。

2871e8713a5428b4460801366ecfb20b.png

李雷

cb66149611623577b82ed4c995a0a5bd.png

韩梅梅

emmmm.. 有点懂了,那Collection接口下的List实现类又分为LinkedList,ArrayList,是随便用哪个都可以吗?

....当然不是。

ArrayList本质是个数组,可以通过下标直接访问它的元素。而LinkedList是个双链表。

所以一般情况下,用ArrayList就可以了,如果涉及到频繁的插入和删除元素,这个时候考虑使用LinkedList,另外Java里面的Queue和Stack也是依赖LinkedList实现的。

2871e8713a5428b4460801366ecfb20b.png

李雷

cb66149611623577b82ed4c995a0a5bd.png

韩梅梅

170f48b06a9ee3212a1ba105f7ac3844.png170f48b06a9ee3212a1ba105f7ac3844.png170f48b06a9ee3212a1ba105f7ac3844.png我这就去学习.......

f14f0acc397c840dc8668f7cfef483d5.gif

分享、在看与点赞

只要你点,就会带来更多好运

f14f0acc397c840dc8668f7cfef483d5.gif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值