【转载】 原文链接
参考资料
基于最小堆(小根堆)的topn算法
基于堆实现的优先级队列:PriorityQueue 解决 Top K 问题
Java优先队列(PriorityQueue)示例
JDK源码研究PriorityQueue(优先队列)
优先级队列:PriorityQueue
/- 记录技术成长点滴 -/
【转载】原文链接
并发优化的
ArrayList
。用CopyOnWrite
策略,在修改时先复制一个快照来修改,改完再让内部指针指向新数组。因为对快照的修改对读操作来说不可见,所以只有写锁没有读锁,加上复制的昂贵成本,典型的适合读多写少的场景。如果更新频率较高,或数组较大时,还是
Collections.synchronizedList(list)
,对所有操作用同一把锁来保证线程安全更好。增加了
addIfAbsent(e)
方法,会遍历数组来检查元素是否已存在,性能可想像的不会太好。
【转载】 原文链接
关于Java集合的小抄中是这样描述的:
以数组实现。节约空间,但数组有容量限制。超出限制时会增加50%容量,用System.arraycopy()复制到新的数组,因此最好能给出数组大小的预估值。默认第一次插入元素时创建大小为10的数组。
按数组下标访问元素–
get(i)/set(i,e)
的性能很高,这是数组的基本优势。直接在数组末尾加入元素–
add(e)
的性能也高,但如果按下标插入、删除元素–add(i,e), remove(i)
,remove(e)
,则要用System.arraycopy()
来移动部分受影响的元素,性能就变差了,这是基本劣势。
【转载】原文链接
A Red-Black tree based NavigableMap implementation. The map is sorted according to the natural ordering of its keys, or by a Comparator provided at map creation time, depending on which constructor is used.
This implementation provides guaranteed log(n) time cost for the containsKey, get, put and remove operations. Algorithms are adaptations of those in Cormen, Leiserson, and Rivest’s Introduction to Algorithms.
之前已经学习过HashMap
和LinkedHashMap
了,HashMap
不保证数据有序,LinkedHashMap
保证数据可以保持插入顺序,而如果我们希望Map
可以保持key
的大小顺序的时候,我们就需要利用TreeMap
了。