1.java集合类
2.java IO类
3.java 异常
4.java 多线程
5.java 网络编程
6.java 封装、interface与abstract
7.java反射、java动态代理
一、集合类
框架图如下:图一
要点:
1.线程安全 Vector、Hashtable、ConcurrentHashMap(java.util.Concurrent)
2.HashMap底层
负载因子 0.75,初始大小16,超过16*0.75 resize()扩大一倍;
数据结构 Entry(Map.Entry)数组(table)+链表(Entry包含key,value,next),put先计算key的hash值(取余数,但是是h&(table.length-1))找到对应的entry,再在entry中遍历是否有该key,若有则更新value值,若没有则新建个Entry并放置于对应链表头部。
遍历hashMap,map.entrySet()方法,map.keySet()方法,Iterator itr = map.entrySet.iterator();
jdk 1.8优化 优化了高位运算算法,resize()不重新计算所有hash值移动所有元素,只算部分、移动部分,并且移动的时候不再倒转链表了。
当链表元素大于8时采用红黑树的数据结构
3.ConcurrentHashMap底层
分段锁(Segment为可重入锁ReentrantLock)数组,每个segment里面有HashEntry数组,每个hashEntry维护一个链表
put()先定位segment并获取锁,再在segment里面进行插入操作(扩容只对segment进行而不对整个concurrenthashmap进行)。
get ()共享变量如c里value、next都定义为volatile,保证多线程读,单线程写。
4.HashMap\HashTable\ConcurrentHashMap区别
hashMap key可为null,value可为null
hashTable key不可为null,方法全部由synchronized修饰。
二、java io 类