关于HashMap的一些讨论
2017-11-16 15:26
218 查看
HashMap是我们经常用的一个类,也是面试中经常会到的问题,所以分享一些HashMap的一些内容。
重点:put,get,resize扩容
先贴出一些我参考的文章:
1. http://blog.csdn.net/fyxxq/article/details/42066843
2. http://blog.csdn.net/hxpjava1/article/details/55670439
3. https://www.cnblogs.com/hongdada/p/6024832.html
下面是我的一些总结:
public V put(K key, V value) { if (key == null) return putForNullKey(value); int hash = hash(key.hashCode()); // 根据hash值找到插入的数组下标 int i = indexFor(hash, table.length); for (Entry<K,V> e = table[i]; e != null; e = e.next) { Object k; // 当下标相同并且key equals也相同时,就将当前的value替换 if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { V oldValue = e.value; e.value = value; e.recordAccess(this); return oldValue; } } modCount++; // 在下标为i的数组中加入这个Entry addEntry(hash, key, value, i); return null; }
public V get(Object key) { if (key == null) return getForNullKey(); int hash = hash(key.hashCode()); // 根据hash值找到这个数组下标 for (Entry<K,V> e = table[indexFor(hash, table.length)]; e != null; e = e.next) { Object k; // 下标一样并且key equals也一样,则返回这个value if (e.hash == hash && ((k = e.key) == key || key.equals(k))) return e.value; } // 否则没有值返回 return null; }
其中putForNullKey方法表示key为null的Entry,只保存在table[0]中的第一个链表中,取也是取table[0]的链表的第一个节点。
private V putForNullKey(V value) { for (Entry<K,V> e = table[0]; e != null; e = e.next) { // 取出下标为0的链表,如果当前key为null,则替换当前值 if (e.key == null) { V oldValue = e.value; e.value = value; e.recordAccess(this); return oldValue; } } modCount++; // 将null添加到下标为0的链表中的第一个节点 addEntry(0, null, value, 0); return null; }
相关文章推荐
- 关于CLR内存管理一些深层次的讨论[上篇]
- 关于单例模式的一些讨论(实现单例模式)
- 关于本命年的一些讨论
- 关于交换两个值的一些讨论
- Zedboard-关于Zedboard的FSBL的一些问题讨论
- 关于何种情况下使用DataGrid、DataList或Repeater的一些讨论(1)
- HashMap中关于数组和链表的一些认识
- 关于绝对定位一些讨论
- C# 中关于listview的一些讨论
- 关于Android中传递数据的一些讨论
- 关于C++中类与对象的一些讨论
- More Effective C++议题【六】:关于自增、自减操作符的一些讨论
- 关于阙宏宇lighttpd与mod_cache在twitter上的一些讨论
- 关于Java中的数据表示的一些讨论
- OGRE·Irrlicht·初印象·及与古老意念关于不变性和可变性程度的讨论的一些总结
- 关于MySQL变量innodb_rollback_on_timeout一些讨论
- 关于MySQL变量innodb_rollback_on_timeout一些讨论
- 关于“开源”的一些讨论
- 关于HashMap底层的一些问题
- HashMap中关于数组和链表的一些认识