Java内置集合类
此文主要用来对Java内置的集合类进行回顾总结。
PriorityQueue
- 优先级队列内部基于一个优先堆。优先级队列中的元素要么按照natural ordering排序,要么在创建的时候指定一个Comparator比较器
- 优先级队列本身是没有大小限制的,内部通过使用一个数组来维护一个最小堆(堆顶是最小的元素)
- 不保证线程安全,如果需要线程安全的优先级队列,需要使用PriorityBlockingQueue,或者加锁使用PriorityQueue
HashMap
- 使用Hash表来存储数据(数组+链表的形式),通过对key进行hash得到元素在Hash表中的位置
- 扩容:当Map中的元素个数超过 数组大小 * 容载率的时候,就会进行扩容(容量扩大为现在的两倍)。扩容后需要对每个元素均进行hash操作,因此十分耗时
- Fail-Fast机制:Java集合中的一种错误机制。当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast事件。在源码实现过程中是通过modCount域进行的。每次获取下一个迭代对象的时候,都判断modCount这个域是否改变,改变则直接抛出异常。
HashSet
- HashSet是基于HashMap实现的,是HashMap的包装类
- HashSet中的key为set中传入的key,value为一个公有的Object()对象。
HashTable
- 是HashMap的线程安全版,Java 5中使用ConcurrentHashMap来代替。
- 使用synchronized来实现线程安全,锁定整张hash-table
LinkedHashMap
- 维护一个运行于所有条目的双重链表列表。此链表定义了迭代的顺序,该迭代的顺序可能是插入顺序或者访问顺序,默认为按照插入顺序迭代
- 可以用来构建LRU(最近最少被使用)缓存,根据访问顺序构建LinkedHashMap