1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| final HashMap.TreeNode<K, V> getTreeNode(int h, Object k) { return (this.parent != null ? this.root() : this).find(h, k, (Class)null); }
final HashMap.TreeNode<K, V> find(int h, Object k, Class<?> kc) { HashMap.TreeNode p = this; do { HashMap.TreeNode<K, V> pl = p.left; HashMap.TreeNode<K, V> pr = p.right; int ph; if ((ph = p.hash) > h) { p = pl; } else if (ph < h) { p = pr; } else { Object pk; if ((pk = p.key) == k || k != null && k.equals(pk)) { return p; }
if (pl == null) { p = pr; } else if (pr == null) { p = pl; } else { int dir; if ((kc != null || (kc = HashMap.comparableClassFor(k)) != null) && (dir = HashMap.compareComparables(kc, k, pk)) != 0) { p = dir < 0 ? pl : pr; } else { HashMap.TreeNode q; if ((q = pr.find(h, k, kc)) != null) { return q; }
p = pl; } } } } while(p != null);
return null; }
|