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));
}
浙公网安备 33010602011771号