已迁移到gitbook,请访问深入理解Java虚拟机笔记
Java泛型语法糖
Java枚举语法糖
Java从1.5引入枚举类型,EffectiveJava第2版item 30也建议我们使用枚举来代替int常量。我们从下面的Enum
示例中看下枚举类型到底是什么。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
|
HashMap源码分析
HashMap
是存储key-value的集合,底层采用Node<K,V>[] table
实现,初始大小为24即16。
数据结构与算法
ArrayList
- 尾插效率高,支持随机访问
- 中间插入或者删除效率低
- 空间不够用时,自动增长为现有空间的1.5倍
- 底层使用Object数组来存储数据,使用System.arrayCopy来移动元素
LinkedList
- 头插,中间插,删除效率高
- 不支持随机访问
- MessageQueue中Message根据msg.when来进行插入,mMessages指向头结点
Vector
- 底层使用数组实现,增长看
capacityIncrement
,若capacityIncrement
小于0,翻倍增长 - 方法有
synchronized
修饰,线程安全 Stack
栈底层实现使用的Vector
Stack
在同一端进行插入和删除,FILO
- 队列
Queue
是只允许在一端进行插入操作,而在另一端进行删除操作的线性表,插入的一端称为队尾,删除的一端称为队头 - 把队列的头尾相接的顺序存储结构称为循环队列
- 双端队列
Deque
是一种具有队列和栈的性质的数据结构,双端队列中的元素可以从两端弹出,其限定插入和删除操作在队列的两端进行。LinkedList
,ArrayDeque
实现了Deque
接口,LinkedBlockingQueue
实现了BlockingDeque
接口 - 优先级队列,
PriorityQueue
,MessageQueue
根据Message.when
来进行插入