java.util.HashMap是很常见的类(5)

来源:未知 责任编辑:责任编辑 发表时间:2014-05-10 11:49 点击:


 
table[bucketIndex] = new Entry<K,V>(hash, key, value, e);新建一个Entry对象,并放在当前位置的Entry链表的头部,看看下面的 Entry构造函数就知道了,注意红色部分。
Java代码 
Entry(int h, K k, V v, Entry<K,V> n) { 
       value = v; 
       next = n; 
       key = k; 
       hash = h; 
   } 
 

如何扩容?
        当put一个元素时,如果达到了容量限制,HashMap就会扩容,新的容量永远是原来的2倍。
上面的put方法里有这样的一段:

Java代码 
if (size++ >= threshold) 
            resize(2 * table.length); 
 
这是扩容判断,要注意,并不是数据尺寸达到HashMap的最大容量时才扩容,而是达到 threshold指定的值时就开始扩容, threshold=最大容量*加载因子。 看看resize方法
 
Java代码 
void resize(int newCapacity) { 
      Entry[] oldTable = table; 
      int oldCapacity = oldTable.length; 
      if (oldCapacity == MAXIMUM_CAPACITY) { 
          threshold = Integer.MAX_VALUE; 
          return; 
      } 
 
      Entry[] newTable = new Entry[newCapacity]; 
      transfer(newTable); 
      table = newTable; 
      threshold = (int)(newCapacity * loadFactor); 
  } 
 
重点看看红色部分的 transfer方法
 
Java代码 
void transfer(Entry[] newTable) { 
      Entry[] src=\'#\'"
      int newCapacity = newTable.length; 
      for (int j = 0; j < src.length; j++) { 
          Entry<K,V> e = src[j]; 
          if (e != null) { 
              src[j] = null; 
              do { 
                  Entry<K,V> next = e.next; 
                  int i = indexFor(e.hash, newCapacity); 
                  e.next = newTable[i]; 

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Java编程语言的八大优点
  • JVM对象生命周期详细介绍
  • Java平台上的CRM系统
  • Java 算数测试小程序
  • Command(命令模式)
  • Java 一个简单的画图程序
  • Java环境 使用Resin在NT环境下配置JSP环境
  • Java 日历的小程序
  • Java 统计代码的小工具
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1