添加数据原理
- HashMap底层是(数组+链表+红黑树)
- 添加一个元素时,先得到hash值,然后把它转成索引值
- 然后找到存储数据表table,看这个索引位置是否已经存放元素
- 如果没有,直接加入
- 如果有,调用equals方法对准备加入元素和已有元素进行比较,如果相同,则放弃添加,如果不相同,则添加至最后
- 在Java8中,如果一条链表的元素个数达到TREEIFY_THRESHOLD(默认为8),并且table的大小>=MIN_TREEIFY_CAPACITY(默认64),就会进行树化
数据结构
- table:存放数据类型为Node<hash,key,value,next>,存放基本数据
- entrySet:存放数据类型为Entry<key,value>,存放了数据的引用
- 同理,keySet和values也一样
- keySet:可以单独存放了Node节点中key值的引用
- values:可以单独存放Node节点中value值的引用
package aggregate.map;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapSource_ {
public static void main(String[] args) {
Map map = new HashMap();
map.put("1","tom");
map.put("2","jack");
Set set = map.entrySet();
System.out.println(set.getClass());
for (Object obj : set) {
Map.Entry entry = (Map.Entry) obj;
System.out.println(entry.getKey() + "-" + entry.getValue());
}
Set key = map.keySet();
Collection value = map.values();
System.out.println(key.getClass() + "\n" + value.getClass());
}
}
|