> 知识
集合篇啥意思(java集合hashset用法)
导语:集合篇-HashMap(JAVA)
前言
HashMap是实现Map接口的hash表,以key-value形式存储数据,并且key/value都是可以存储null值,而且是无序的。在jdk文档介绍中就有这么一句话。
使用案例
源码分析
1、new HashMap<>()
//加在一起因子//static final float DEFAULT_LOAD_FACTOR = 0.75f;public HashMap() { this.loadFactor = DEFAULT_LOAD_FACTOR; // all other fields defaulted}
2、java.util.HashMap34;rawtypesunchecked&get
public V get(Object key) { Node<K,V> e; return (e = getNode(hash(key), key)) == null ? null : e.value;}
final Node<K,V> getNode(int hash, Object key) { Node<K,V>[] tab; Node<K,V> first, e; int n; K k; if ((tab = table) != null && (n = tab.length) > 0 && (first = tab[(n - 1) & hash]) != null) { //key-hash出来的值对应的下标有三种情况 //1、单节点;2、链表、3、红黑树 if (first.hash == hash && // always check first node ((k = first.key) == key || (key != null && key.equals(k)))) //如果找到value相等的,直接返回 return first; //这种情况就是存在链表或者红黑树 if ((e = first.next) != null) { //如果是树节点类型的则直接找树 if (first instanceof TreeNode) return ((TreeNode<K,V>)first).getTreeNode(hash, key); //这里是找链表的 do { if (e.hash == hash && ((k = e.key) == key || (key != null && key.equals(k)))) return e; } while ((e = e.next) != null); } } return null;}
final TreeNode<K,V> getTreeNode(int h, Object k) { return ((parent != null) ? root() : this).find(h, k, null);}
final TreeNode<K,V> find(int h, Object k, Class<?> kc) { TreeNode<K,V> p = this; do { int ph, dir; K pk; TreeNode<K,V> pl = p.left, pr = p.right, q; if ((ph = p.hash) > h) p = pl; else if (ph < h) p = pr; else if ((pk = p.key) == k || (k != null && k.equals(pk))) return p; else if (pl == null) p = pr; else if (pr == null) p = pl; else if ((kc != null || (kc = comparableClassFor(k)) != null) && (dir = compareComparables(kc, k, pk)) != 0) p = (dir < 0) ? pl : pr; else if ((q = pr.find(h, k, kc)) != null) return q; else p = pl; } while (p != null); return null;}
总结
从上面HashMap的put方法和get方法中可以知道,HashMap的底层实现是数组+链表+红黑树,下面的图我只是简单的画一下。再者就是红色树的形成过程可以参考一下TreeMap那篇文章。
喜欢这样做源码解析的同学,可以点赞、关注+收藏,后期还会推出其他框架源码分析。
如果有补充的地方,留言区见
免责声明:本站部份内容由优秀作者和原创用户编辑投稿,本站仅提供存储服务,不拥有所有权,不承担法律责任。若涉嫌侵权/违法的,请反馈,一经查实立刻删除内容。本文内容由快快网络小滢创作整理编辑!