Map(一)
1.Map的实现类的结构
1.1 实现类
Map:key-values
|----HashMap:线程不安全,效率高 底层 数组+链表+红黑树
|----LinkedHashMap: 在HashMap基础上加了一对前后指针,对于遍历操作效率高于HashMap
|----TreeMap :保证按照添加的key-values 排序,考虑的是key的自然排序或定制排序
|----HashTable:古老的实现类,线程安全,效率低,不能存储null的key-value
|----Properties:常用来处理配置文件
2. Map结构理解
2.1 结构理解
key:无序的,不可重复,使用Set,Key所在的类需要重写equals(),hashCode()
value:无序的,可重复,使用Collection
Entry:一个key-value 构成entry,无序,不可重复
2.2 HashMap存储结构
Node(int hash, K key, V value, Node<K,V> next) { this.hash = hash; this.key = key; this.value = value; this.next = next; }
2.3 HashMap概念理解
DEFAULT_LOAD_FACTOR :加载因子0~1 小:不容易形成链表,但是数组存储空间利用率不够 大:利用率高,但是容易形成链表
threshold:临界点,到达临界点就扩容 之所以不是在数组的长度到达最大时扩容,是因为数组不一定存放满。 加载因子*数组长度
TREEIFY_THRESHOLD:当数组中某一个元素以链表存在的数据个数>8 && 数组的长度小于 64 则转换成红黑树
2.4 LinkedHashMap
存储结构:
static class Entry<K,V> extends HashMap.Node<K,V> { Entry<K,V> before, after; Entry(int hash, K key, V value, Node<K,V> next) { super(hash, key, value, next); } }
重写:
Node<K,V> newNode(int hash, K key, V value, Node<K,V> e) { LinkedHashMap.Entry<K,V> p = new LinkedHashMap.Entry<K,V>(hash, key, value, e); linkNodeLast(p); return p; }
前后链接:
private void linkNodeLast(LinkedHashMap.Entry<K,V> p) { LinkedHashMap.Entry<K,V> last = tail; tail = p; if (last == null) head = p; else { p.before = last; last.after = p; } }

浙公网安备 33010602011771号