Set和List区别-JAVA成长之路

List和Set是用来存放集合的接口,并且二者都继承自接口Collection。

1、 在List中的元素存放是有序的,可以存放重复的元素,检索效率较高,插入删除效率较低。

ArrayList、LinkedList、Vector是List的两个实现类。

ArrayList:

底层的实现就是一个可变数组非同步实现,当数组长度不够用的时候就会重新开辟一个新的数组,然后将原来的数据拷贝到新的数组内。由于这一底层实现,所以ArrayList集合中元素存储的位置是连续的,查询起来效率比较高,插入删除效率较低。

LinkedList:

底层实现是双向循环链表数据结构非同步实现,数据结构如下代码

class Node

{

private Node privious;//引用前一个节点

private Object value;//当前节点的value值

private Node next;//引用下一个节点的值

}

1

2

3

4

5

6

LinkList中元素存储位置是不连续的,插入删除的执行效率高,查询效率低。

Vector:

Vector作为List的另外一个典型实现类,完全支持List的全部功能,Vector类也封装了一个动态的,允许在分配的Object[]数组,Vector是一个比较古老的集合,JDK1.0就已经存在,建议尽量不要使用这个集合,Vector与ArrayList的主要是区别是,Vector是线程安全的,但是性能比ArrayList要低。

2、 set没有存放顺序不能存放重复元素检索效率较低,插入删除效率较高,由于set集合储存位置是由他的HashCode码决定的,所以他的存储对象必须有equals()方法,而且set遍历只能用迭代,没有下标。

HashSet:

底层由哈希表(实际上是一个HashMap实例)支持,不能保证元素的顺序,元素是无序的,可以有null,但是null只能有一个,不能有重复的元素。HashSet不是同步的,需要外部保持线程之间的同步问题。

TreeSet:

TreeSet实现了SortedSet接口,它是一个有序的集合类,TreeSet的底层是通过TreeMap实现的。TreeSet并不是根据插入的顺序来排序,而是根据实际的值的大小来排序。TreeSet也支持两种排序方式:自然排序和自定义排序。不能放入重复元素和null。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200512A0JX7W00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券