HashMap记录

1、HashMap是一个散列表,存储的是key-value键值对

    不同步的,线程不安全的,key 和 value都可以为 null,不是有序的

    两个参数:初始容量、加载因子(0.75),哈希表中的条目数超出了加载因子与当前容量的乘积时,则要对该哈希表进行 rehash 操作(即重建内部数据结构)

2、插入

 

1  HashMap<String , Double> map = new HashMap<String , Double>(); 
2  map.put("语文" , 80.0); 
3  map.put("数学" , 89.0); 
4  map.put("英语" , 98.2); 

 

    HashMap 类中 put(K key, V value)方法的源代码是:

 1  public V put(K key, V value) 
 2  { 
 3      // 如果 key 为 null,调用 putForNullKey 方法进行处理
 4      if (key == null) 
 5          return putForNullKey(value); 
 6      // 根据 key 的 keyCode 计算 Hash 值
 7      int hash = hash(key.hashCode()); 
 8      // 搜索指定 hash 值在对应 table 中的索引
 9       int i = indexFor(hash, table.length);
10      // 如果 i 索引处的 Entry 不为 null,通过循环不断遍历 e 元素的下一个元素
11      for (Entry<K,V> e = table[i]; e != null; e = e.next) 
12      { 
13          Object k; 
14          // 找到指定 key 与需要放入的 key 相等(hash 值相同
15          // 通过 equals 比较放回 true)
16          if (e.hash == hash && ((k = e.key) == key 
17              || key.equals(k))) 
18          { 
19              V oldValue = e.value; 
20              e.value = value; 
21              e.recordAccess(this); 
22              return oldValue; 
23          } 
24      } 
25      // 如果 i 索引处的 Entry 为 null,表明此处还没有 Entry 
26      modCount++; 
27      // 将 key、value 添加到 i 索引处
28      addEntry(hash, key, value, i); 
29      return null; 
30  } 

     其中一个重要的内部接口:Map.Entry,每个 Map.Entry 其实就是一个 key-value 对。

 

posted @ 2017-10-16 21:01  一罐热茶  阅读(147)  评论(0编辑  收藏  举报