首页 > 编程知识 正文

list是否继承collection,list集合和set集合的特点

时间:2023-05-06 03:56:40 阅读:203530 作者:1394

一、继承关系图二、 实现List接口中的类比较三、实现Set接口的类之间比较

一、继承关系图

Collection集合主要分为两个类,第一类是实现了List接口的类,如LinkedList、ArrayList、Vector;另一类就是实现了Set接口的类,如LinkedHashSet、HashSet、TreeSet。这些类都是继承了AbstractCollection集合的类实现了List接口的类和实现了Set接口的类的不同点在于,前者集合中可以出现重复的元素,而后者集合之中不允许出现重复的元素实现了了List接口的类和实现了Set接口的这些类除了Vector这个集合是线程安全的,其他集合都是线程非安全的实现List接口的类都可以添加的元素都是有序的,而Set集合并不保证添加元素的有序性 二、 实现List接口中的类比较 比较元素ArrayListLinkedListVector数据结构数组链表数组插入元素慢快慢删除元素慢快慢随机访问快慢快线程安全不安全不安全安全初始容量10null10扩容机制1.5倍无 从上面的总结我们可以看出,ArrayList和Vector底层采用的都是数组数据结构,而LinkedList采用的链表的数据结构对于插入一个元素到指定的位置,由于ArrayList和Vector采用的是数组的形式,所以需要先将原先的元素进行复制,然后再插入。而LinkedList直接通过改变要插入的节点的指针即可。所以插入元素时,LinkedList比ArrayList和Vector的要快。对于删除指定位置的元素和插入元素类似,ArrayList和Vector需要进行一次复制然后执行删除,所以没有LinkedList执行的速度快(其实这里是有一点问题的就是我们要删除一个LinkedList中的元素需要先将进行一次查找,然后进行删除,时间复杂度都是O(n))对于随机访问,ArrayList和Vector采用数组结构可以根据数组索引进行定位,因此能够快速的访问,而LinkedList最坏的情况可能需要O(n)的时间。对于Vector因为底层实现的方法都是采用了synchronized方法,所以是线程安全的,而ArrayList和LinkedList则是线程不安全的对于ArrayList和Vector如果我们不指定初始容量,那么初始化的容量为10,LinkedList初始化为null.ArrayList 和Vector的需要扩容机制而LinkedList不需要,ArrayList在添加元素的时候,会判断需要是否需要扩容,如果需要则扩容为之前的1.5倍,而Vector则是扩容为之前的2倍。 //Vector的扩容机制int newCapacity = oldCapacity + ((capacityIncrement > 0) ? capacityIncrement : oldCapacity);//ArrayList的扩容机制int newCapacity = oldCapacity + (oldCapacity >> 1); 三、实现Set接口的类之间比较 比较HashSetTreeSetEnumSet数据结构HashMapTreeMapEnum数组

这里我们可以看到Set集合使用的数据结构是Map或者是Enum,因此详细的情况我们可以去看HashMap和TreeMap。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。