一文读懂HashMap和HashTable的区别以及常见面试题(23)


       int hash = hash(key.hashCode());        // 取出 table 数组中指定索引处的值
       for (Entry<K V> e = table[indexFor(hash table.length)
; e != null; e = e.next) {            Object k;            //若搜索的key与查找的key相同 , 则返回相对应的value
           if (e.hash == hash && ((k = e.key) == key || key.equals(k)))                return e.value;
               return null;
   

\n

在这里能够根据key快速的取到value除了和HashMap的数据结构密不可分外 , 还和Entry有莫大的关系 , 在前面就提到过 , HashMap在存储过程中并没有将key , value分开来存储 , 而是当做一个整体key-value来处理的 , 这个整体就是Entry对象 。

\n

同时value也只相当于key的附属而已 。 在存储的过程中 , 系统根据key的hashcode来决定Entry在table数组中的存储位置 , 在取的过程中同样根据key的hashcode取出相对应的Entry对象 。

推荐阅读