Java中List(ArrayList、LinkedList(可以实现堆栈、队列、链表相关操作)、Vector)和Set(HashSet、LinkedHashSet、TreeSet)的区别

Collection

  |--List:元素是有序这里指的有序是,元素存取对应的位置不变,如某元素插入是在下标3的位置,则在不变动的情况下,该元素一直在该位置)的,元素可以重复。因为该集合体系有索引。

    |--ArrayList:底层的数据结构使用的是有序数组结构。特点:查询速度很快O(1)。但是增删稍慢O(n)。线程不同步。

    |--LinkedList:底层使用的链表数据结构特点:增删速度很快O(1),查询稍慢O(n)。线程不同步。(可以用在链表操作的、堆栈、队列等相关操作,Deque deque = new LinkedList())

    |--Vector:底层是数组数据结构线程同步。如果不是多个线程操作集合用ArrayList。因为Vector效率低。

 

  |--Set:元素是无序(存入和取出的顺序不一致,特殊LinkedHashSet是有序的),元素不重复。

    |--HashSet:底层数据结构是哈希表。是线程不安全的。不同步。保证元素唯一性原理是判断元素的HashCode是否相同,如果相同还会继续判断元素的equals方法是否为true。

    |--LinkedHashSet的底层数据结构是链表和哈希表特点:FIFO插入有序且唯一。我们可以由链表保证元素有序,由哈希表保证元素唯一

    |--TreeSet: 底层数据结构是二叉排序树。唯一且有序(这里的有序是指:TreeSet集合会自动对元素进行排序,默认是升序排序(使用场景:可以使用TreeSet,在一些需要非重复并且元素按顺序排列的场景。)

 

使用场景:字符去重

String enCryption= "ABCDABCDABCDEFGHIJKLMNOPQRSTUVWXYZ";
LinkedHashSet<String> linkedSet = new LinkedHashSet<String>();
for (int i = 0; i < enCryption.length(); i++) {
  linkedSet.add(enCryption.substring(i, i+1));
}

 

参考链接:https://blog.csdn.net/USTC_Zn/article/details/58065298

posted @ 2021-12-28 16:09  对月当歌  阅读(150)  评论(0)    收藏  举报