Java开发基础技术(二)
其他
2018-09-24 10:16:58
阅读次数: 0
1、基本类型
序号 |
基本类型 |
bit位数 |
最小值 |
最大值 |
包装器 |
- |
void |
- |
- |
- |
Void |
1 |
boolean |
- |
- |
- |
Boolean |
2 |
char |
16 |
unicode 0 |
unicode 216 - 1 |
Character |
3 |
byte |
8 |
-128 |
127 |
Byte |
4 |
short |
16 |
-215 |
215 - 1 |
Short |
5 |
int |
32 |
-231 |
231 - 1 |
Integer |
6 |
long |
64 |
-263 |
264 - 1 |
Long |
7 |
float |
32 |
- |
- |
Float |
8 |
double |
64 |
- |
- |
Double |
- float内存 :1符号位 + 8 指数位 + 23 尾数位
- double内存:1符号位 + 11 指数位 + 52 尾数位
2、HashMap
- jdk7中,数组 + 链表,节点通过内部类Map.Entry实现,包括4个属性:key,value,hash,next
- jdk8中,当链表长度超过8后,链表替换为红黑树,以提升查找效率。节点通过Node或TreeNode实现。
- capacity数组容量(默认16),loadFactor负载因子(默认0.75),当元素超过capacity * loadFactor时,2倍扩容。
- 容量为2n大小时,hash定位可以直接通过2n-1位运算,比求余法高效。
- put过程:通过key的hash定位数组,在链表中比较key,旧值替换,新值先判断扩容,再插入链表或红黑树。
- get过程:通过key的hash定位数组,在链表中查找key,返回结果。
- 非线程安全,key、value可null。
3、 ConcurrentHashMap
3.1 JDK7 ConcurrentHashMap
- Segment数组 + HashEntry数组 + HashEntry链表。
- concurrencyLevel,Segment数组容量,初始化后不可扩容,Segment继承了ReentrantLock进行锁控制,默认值16,理论上同时支持16个线程并发。
- initialCapacity,初始容量,平均分配到各个Segment中。
- Segment内部类似于HashMap实现,内部HashEntry数组+链表实现,可扩容。
- 线程安全,key、value不可null。解释:由于get返回null时,无法判断key不存在,还是value为空,需要再次执行contains检查,在两次调用过程中数据可能变化,所以不支持。
3.2 JDK8 ConcurrentHashMap
- JDK8 ConcurrentHashMap在结构上和HashMap一样,只是多了线程安全的特性。
- 相比JDK7版本,取消了Segment,直接在table数组元素上加锁
- 相比JDK7版本,增加了红黑树
4、HashTable
- 和HashMap一样,数组 + 链表 实现。
- 使用synchronize实现线程安全,key,value非null。
- 默认容量为11,扩展时尽量使用素数和奇数保证hash平均。通过hash求余法定位。
- HashTable已经被淘汰了,不需要使用。
5、TreeMap
- 红黑树实现
- Entry的6属性:key,value,left、right、parent、color。
- 非同步的,可null的前提条件是:实现comparator接口,且对Null进行处理。
6、LinkedList
- 链表实现,读慢,写快。
- 可null,非线程安全,通过Collections.synchronizedList(new LinkedList())使线程安全。
7、ArrayList
- 数组实现,都快,写慢。
- 可null,非线程安全
- 当大量插入元素时,提前使用ensureCapacity方法扩展容量,可以提升效率。
8、Vector
- 线程安全版的ArrayList,通过synchronize实现。
- 当创建iterator并使用过程中,vector发生改变,将抛出异常,必须处理。
9、Stack
- 继承Vecotr,实现后进先出(FILO)的容器。
- 5个方法:pop,push,peek(得到栈顶元素),empty(检测是否空),search(查找位置)。
10、HashSet
- 底层通过HashMap<E, Object>。
- 值不重复,且无序。
- 最多一个null元素。
11、TreeSet
- 底层通过TreeMap<E, Object>。
- 值不重复,插入时按一定的顺序。
12、WeekHashMap
- key为弱引用,必须在Map之外有强引用,否则会被GC。
转载自blog.csdn.net/weixin_43102143/article/details/82825099