ArrayList,Vector,LinkedList,HashSet,LinkedHashSet,TreeSet比较

xiaoxiao2021-02-28  37

List是一种有序的Collection, 元素可以重复

ArrayList是实现了基于动态数组的数据结构,使用可增长的长数组实现的.扩容增加50%,不可以设置,默认空间10

LinkedList基于链表的数据结构,使用双链表实现的,对于随机访问,ArrayList优于LinkedList,因为LinkedList需要移动指针,对于新增和删除LinkedList占优势,因为ArrayList需要移动数据.

Vector 是线程安全的,源码中有很多的synchronized,(扩容增加一倍,可以设置,默认空间10),效率相对低

Set不允许包含相同元素,如果是两个对象根据equals方法进行判断

HashSet:不能保证元素的排列顺序,不是同步的,集合元素可以是null但只能放入一个null.(内部是一个hashMap存储,具体逻辑:先获得对象hashCode(),然后根据其值决定对象在bucket中的存储位置)

LinkedHashSet同样根据hashCode值来决定元素存储位置,但同时使用链表维护元素的次序,迭代访问时候性能优于HashSet,但插入时性能弱与HashSet

TreeSetSortedSet接口的唯一实现类,可以确保集合处于排序状态.默认排序方式:从小到大,可以定制排序,需要实现Comparator接口,实现compare方法

HashMap  允许key, value为null, 且key为null的只有一个

HashTable ConcurrentHashMap 不允许 key和value为null,  因为他们是支持高并发的,再并发情况下,get( key) 时,无法判段是 set进去的null值,还是没有这个key,  如果,通过contains(key)判断,判断完再调用get,map的数据情况有可能已经发生变化。

TreeMap (基于红黑树,排过序)不允许key为null, 允许 value为null,因为再put时,调用了 compare进行 null值检查

HashSet 底层使用的HashMap实现的,add( value) 使用 map.put(value, new Object()); 故:可以为null值

转载请注明原文地址: https://www.6miu.com/read-2625761.html

最新回复(0)