Collection子接口实现类之间的关系与特点(Collection集合)

Collection大纲

我们先来看一幅图:
在这里插入图片描述
一下就很清晰了,Collection接口下存在三个子接口,他们分别是:
SetListQueue,有如下定义:

public interface List extends Collection {}
public interface Set extends Collection {}
public interface Queue extends Collection{}

其中SetListQueue同级别,都继承了Collection接口。

1.Set(无序,唯一

老表且看:
在这里插入图片描述
Set接口有三个实现类:HashSetLinkedHashSetTreeSet


1-1.HashSet

底层元素为哈希表,无序且唯一,利用equalshashCode()方法来保证元素的唯一性。

public class HashSet<E>
    extends AbstractSet<E>
    implements Set<E>, Cloneable, java.io.Serializable{....}

1-2.LinkedHashSet

底层数据结构是链表哈希表,由链表保证元素有序,由哈希表保证元素唯一。

public class LinkedHashSet<E>
    extends HashSet<E>
    implements Set<E>, Cloneable, java.io.Serializable{....}

1-3.TreeSet

这个有点特殊,因为它不是直接实现的Set接口,它通过实现SortedSet接口(SortedSet继承了Set接口),间接实现了Set

public interface SortedSet<E> extends Set<E>{....}

//========================

public interface NavigableSet<E> extends SortedSet<E>{....}

//========================

public class TreeSet<E> extends AbstractSet<E>
    implements NavigableSet<E>, Cloneable, java.io.Serializable{....}

这样继承下来,最终只有TreeSet这一个可用实现类。而且SortedSet接口只有TreeSet这一个实现可用其中元素一定是有序的。


2.List(有序,可重复

老表再看这个:
在这里插入图片描述
List下有三个实现类:ArrayListVectorLinkedList

2-1.ArrayList

底层数据结构是数组,查询快,增删慢。虽然线程不安全,但是效率高!

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable

2-2.LinkedList

底层数据结构是链表,查询慢,增删快。与ArrayList一样线程不安全,但是效率高。

public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable

2-3.Vector

Java 1.0老病友了,远古集合,后续才实现的List接口(刚开始没有实现List)。个人感觉是一个有点过时的集合,Vector在每个单独的操作上都是同步的,但是它是List中唯一一个线程安全的,但是效率低下,通常用Vector的地方用ArrayList也很好用,二者基本没有什么区别。

public class Vector<E>
    extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.SerializableP{....}

3.Queue

摊牌了,我没学,我不会👍。但是有一点需要清楚,Queue下面又一个我们都很熟悉的东西:LinkedList

这不科学?
LinkedList既可以实现Queue接口,也可以实现List接口.只不过呢, LinkedList实现了Queue接口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。

这很科学!


4.如何选用?

还是看图说话(有点
在这里插入图片描述

在这里插入图片描述
That’s All~

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值