/**
* @description HashMap 线程不安全,效率高。
* @description 允许null键和null值,是基于哈希表的Map接口实现。
* @description 哈希表的作用是用来保证键的唯一性的
*/
Map HashMap = new HashMap();
/**
* @description 是基于Map接口的哈希表和链接列表实现,
* @description 由哈希表保证键的唯一性
* @description 由链表保证键盘的有序(存储和取出的顺序一致)
*/
Map LinkedHashMap = new LinkedHashMap();
/**
* @description 线程安全,效率低。不允许null键和null值
*/
Map Hashtable = new Hashtable();
/**
* @description 实现原理是segment段锁,它不再使用和HashTable一样的synchronize一样的关键字对整个方法进行枷锁,而是转而利用segment段落锁来对其进行加锁,以保证Map的多线程安全。
* @description 其实可以理解为,一个ConcurrentHashMap是由多个HashTable组成,所以它允许获取不用段锁的线程同时持有该资源,segment有多少个,理论上就可以同时有多少个线程来持有它这个资源。
* @description 其默认的segment是一个数组,默认长度为16。也就是说理论商可以提高16倍的性能
*
* @description 在JAVA的jdk1.8中则对ConcurrentHashMap又再次进行了大的修改,取消了segment段锁字段,采用了CAS+Synchronize技术来保障线程安全。
* @description 底层采用数组+链表+红黑树的存储结构,也就是和HashMap一样。
* @description 这里注意Node其实就是保存一个键值对的最基本的对象。其中Value和next都是使用的volatile关键字进行了修饰,以确保线程安全
*/
Map ConcurrentHashMap = new ConcurrentHashMap();
/**
* @description 是基于红黑树的Map接口的实现。
*/
Map TreeMap = new TreeMap();
/**
* @description 它的Key值和Value都可以是null,而且其Map中如果这个Key值指向的对象没被使用,此时触发了GC,该对象就会被回收掉的。
* @description 其原理主要是使用的WeakReference和ReferenceQueue实现的,其key就是weakReference,而ReferenceQueue中保存了被回收的 Key-Value
* @description 如果当其中一个Key-Value不再使用被回收时,就将其加入ReferenceQueue队列中。当下次再次调用该WeakHashMap时,就会去更新该map,
* @description 比如ReferenceQueue中的key-value,将其中包含的key-value全部删除掉。这就是所谓的“自动删除”
*/
Map WeakHashMap = new WeakHashMap();
/**
* @description ArrayList是我们在java开发过程中最常见的一种List实现类,属于线程不安全,
* @description 读取速度快的一种List实现类。也是java入门时最常用的实现类。
*/
List ArrayList = new ArrayList();
/**
* @description 和ArrayList基本相似,利用数组及扩容实现List,
* @description 但Vector是一种线程安全的List结构,它的读写效率不如ArrayList,其原因是在该实现类内在方法上加上了同步关键字
*/
List Vector = new Vector();
/**
* @description 继承于Vector,基本特性与Vector一致,线程安全,
* @description 但效率低,实际就是利用Vector抽象成栈,使之拥有后进先出的特性
*/
List Stack = new Stack();
/**
* @description LinkedList是利用内部类Node为数据单元的双向链表,
* @description 同样LinkedList是线程不安全的,其具有读效率低,写效率高,操作效率高等特性,
* @description 适合用于频繁add,remove等操作的List,同时可以节省一定的内存,在clear的情况下推荐使用GC回收,并且没有最大长度限制。
*
* @description 可以看出双向链表的节点操作没有扩充的拷贝操作,在这种情况下操作相对于反复扩容效率要高,
* @description 但也仅是相对的,但是有大量数据操作,特别是删除等,只需要做节点的横向移动,效率是很高的
*/
List LinkedList = new LinkedList();
Set HashSet = new HashSet();
/**
* @description LinkedHashSet是有序的(不同于HashSet)
* @description LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet
*/
Set LinkedHashSet = new LinkedHashSet();
/**
* @description 描述的是Set的一种变体——可以实现排序等功能的集合,它在将对象元素添加到集合中会自动按照某种比较规则将其插入到有序的对象序列中,并保证该集合元素组成的读序列按照升序排列。
* @description TreeSet实现了SortedSet接口,顾名思义是一种排序的Set集合,查看JDK源码发现底层使用TreeMap实现的,本质上是一个红黑树原理。
* @description 正因为它是排序了的,所以相对于HashSet来说,TreeSet提供了一些额外的按排序位置访问元素的方法,例如first(),lower(),subSet(),headSet(),tailSet()
*/
Set TreeSet = new TreeSet();
Map、List 、Set 的实现类
最新推荐文章于 2024-04-04 21:11:36 发布