Skip to content

Commit c8d4a24

Browse files
author
Roger Riggs
committed
8366214: [lworld] Use Objects.equals in HashMap and ConcurrentHashmap
Reviewed-by: liach
1 parent 480094c commit c8d4a24

File tree

2 files changed

+38
-44
lines changed

2 files changed

+38
-44
lines changed

src/java.base/share/classes/java/util/HashMap.java

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -576,14 +576,14 @@ final Node<K,V> getNode(Object key) {
576576
if ((tab = table) != null && (n = tab.length) > 0 &&
577577
(first = tab[(n - 1) & (hash = hash(key))]) != null) {
578578
if (first.hash == hash && // always check first node
579-
((k = first.key) == key || (key != null && key.equals(k))))
579+
Objects.equals(key, first.key))
580580
return first;
581581
if ((e = first.next) != null) {
582582
if (first instanceof TreeNode)
583583
return ((TreeNode<K,V>)first).getTreeNode(hash, key);
584584
do {
585585
if (e.hash == hash &&
586-
((k = e.key) == key || (key != null && key.equals(k))))
586+
Objects.equals(key, e.key))
587587
return e;
588588
} while ((e = e.next) != null);
589589
}
@@ -639,7 +639,7 @@ final V putVal(int hash, K key, V value, boolean onlyIfAbsent,
639639
else {
640640
Node<K,V> e; K k;
641641
if (p.hash == hash &&
642-
((k = p.key) == key || (key != null && key.equals(k))))
642+
Objects.equals(key, p.key))
643643
e = p;
644644
else if (p instanceof TreeNode)
645645
e = ((TreeNode<K,V>)p).putTreeVal(this, tab, hash, key, value);
@@ -652,7 +652,7 @@ else if (p instanceof TreeNode)
652652
break;
653653
}
654654
if (e.hash == hash &&
655-
((k = e.key) == key || (key != null && key.equals(k))))
655+
Objects.equals(key, e.key))
656656
break;
657657
p = e;
658658
}
@@ -824,16 +824,15 @@ final Node<K,V> removeNode(int hash, Object key, Object value,
824824
(p = tab[index = (n - 1) & hash]) != null) {
825825
Node<K,V> node = null, e; K k; V v;
826826
if (p.hash == hash &&
827-
((k = p.key) == key || (key != null && key.equals(k))))
827+
Objects.equals(key, p.key))
828828
node = p;
829829
else if ((e = p.next) != null) {
830830
if (p instanceof TreeNode)
831831
node = ((TreeNode<K,V>)p).getTreeNode(hash, key);
832832
else {
833833
do {
834834
if (e.hash == hash &&
835-
((k = e.key) == key ||
836-
(key != null && key.equals(k)))) {
835+
Objects.equals(key, e.key)) {
837836
node = e;
838837
break;
839838
}
@@ -1212,7 +1211,7 @@ public V computeIfAbsent(K key,
12121211
Node<K,V> e = first; K k;
12131212
do {
12141213
if (e.hash == hash &&
1215-
((k = e.key) == key || (key != null && key.equals(k)))) {
1214+
Objects.equals(key, e.key)) {
12161215
old = e;
12171216
break;
12181217
}
@@ -1312,7 +1311,7 @@ public V compute(K key,
13121311
Node<K,V> e = first; K k;
13131312
do {
13141313
if (e.hash == hash &&
1315-
((k = e.key) == key || (key != null && key.equals(k)))) {
1314+
Objects.equals(key, e.key)) {
13161315
old = e;
13171316
break;
13181317
}
@@ -1377,7 +1376,7 @@ public V merge(K key, V value,
13771376
Node<K,V> e = first; K k;
13781377
do {
13791378
if (e.hash == hash &&
1380-
((k = e.key) == key || (key != null && key.equals(k)))) {
1379+
Objects.equals(key, e.key)) {
13811380
old = e;
13821381
break;
13831382
}
@@ -2024,7 +2023,7 @@ final TreeNode<K,V> find(int h, Object k, Class<?> kc) {
20242023
p = pl;
20252024
else if (ph < h)
20262025
p = pr;
2027-
else if ((pk = p.key) == k || (k != null && k.equals(pk)))
2026+
else if (Objects.equals(k, (pk = p.key)))
20282027
return p;
20292028
else if (pl == null)
20302029
p = pr;
@@ -2142,7 +2141,7 @@ final TreeNode<K,V> putTreeVal(HashMap<K,V> map, Node<K,V>[] tab,
21422141
dir = -1;
21432142
else if (ph < h)
21442143
dir = 1;
2145-
else if ((pk = p.key) == k || (k != null && k.equals(pk)))
2144+
else if (Objects.equals(k, (pk = p.key)))
21462145
return p;
21472146
else if ((kc == null &&
21482147
(kc = comparableClassFor(k)) == null) ||

src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java

Lines changed: 27 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import java.util.Iterator;
4949
import java.util.Map;
5050
import java.util.NoSuchElementException;
51+
import java.util.Objects;
5152
import java.util.Set;
5253
import java.util.Spliterator;
5354
import java.util.concurrent.atomic.AtomicReference;
@@ -665,8 +666,8 @@ public final boolean equals(Object o) {
665666
return ((o instanceof Map.Entry) &&
666667
(k = (e = (Map.Entry<?,?>)o).getKey()) != null &&
667668
(v = e.getValue()) != null &&
668-
(k == key || k.equals(key)) &&
669-
(v == (u = val) || v.equals(u)));
669+
(Objects.equals(k, key)) &&
670+
v.equals(val));
670671
}
671672

672673
/**
@@ -678,7 +679,7 @@ Node<K,V> find(int h, Object k) {
678679
do {
679680
K ek;
680681
if (e.hash == h &&
681-
((ek = e.key) == k || (ek != null && k.equals(ek))))
682+
(ek = e.key) != null && Objects.equals(k, ek))
682683
return e;
683684
} while ((e = e.next) != null);
684685
}
@@ -949,14 +950,14 @@ public V get(Object key) {
949950
if ((tab = table) != null && (n = tab.length) > 0 &&
950951
(e = tabAt(tab, (n - 1) & h)) != null) {
951952
if ((eh = e.hash) == h) {
952-
if ((ek = e.key) == key || (ek != null && key.equals(ek)))
953+
if ((ek = e.key) != null && Objects.equals(key, ek))
953954
return e.val;
954955
}
955956
else if (eh < 0)
956957
return (p = e.find(h, key)) != null ? p.val : null;
957958
while ((e = e.next) != null) {
958959
if (e.hash == h &&
959-
((ek = e.key) == key || (ek != null && key.equals(ek))))
960+
((ek = e.key) != null && Objects.equals(key, ek)))
960961
return e.val;
961962
}
962963
}
@@ -994,7 +995,7 @@ public boolean containsValue(Object value) {
994995
Traverser<K,V> it = new Traverser<K,V>(t, t.length, 0, t.length);
995996
for (Node<K,V> p; (p = it.advance()) != null; ) {
996997
V v;
997-
if ((v = p.val) == value || (v != null && value.equals(v)))
998+
if ((v = p.val) != null && Objects.equals(value, v))
998999
return true;
9991000
}
10001001
}
@@ -1035,7 +1036,7 @@ else if ((fh = f.hash) == MOVED)
10351036
tab = helpTransfer(tab, f);
10361037
else if (onlyIfAbsent // check first node without acquiring lock
10371038
&& fh == hash
1038-
&& ((fk = f.key) == key || (fk != null && key.equals(fk)))
1039+
&& (fk = f.key) != null && Objects.equals(key, fk)
10391040
&& (fv = f.val) != null)
10401041
return fv;
10411042
else {
@@ -1047,8 +1048,7 @@ else if (onlyIfAbsent // check first node without acquiring lock
10471048
for (Node<K,V> e = f;; ++binCount) {
10481049
K ek;
10491050
if (e.hash == hash &&
1050-
((ek = e.key) == key ||
1051-
(ek != null && key.equals(ek)))) {
1051+
(ek = e.key) != null && Objects.equals(key, ek)) {
10521052
oldVal = e.val;
10531053
if (!onlyIfAbsent)
10541054
e.val = value;
@@ -1140,11 +1140,10 @@ else if ((fh = f.hash) == MOVED)
11401140
for (Node<K,V> e = f, pred = null;;) {
11411141
K ek;
11421142
if (e.hash == hash &&
1143-
((ek = e.key) == key ||
1144-
(ek != null && key.equals(ek)))) {
1143+
((ek = e.key) != null && Objects.equals(key, ek))) {
11451144
V ev = e.val;
1146-
if (cv == null || cv == ev ||
1147-
(ev != null && cv.equals(ev))) {
1145+
if (cv == null ||
1146+
(ev != null && Objects.equals(cv, ev))) {
11481147
oldVal = ev;
11491148
if (value != null)
11501149
e.val = value;
@@ -1167,8 +1166,8 @@ else if (f instanceof TreeBin) {
11671166
if ((r = t.root) != null &&
11681167
(p = r.findTreeNode(hash, key, null)) != null) {
11691168
V pv = p.val;
1170-
if (cv == null || cv == pv ||
1171-
(pv != null && cv.equals(pv))) {
1169+
if (cv == null ||
1170+
(pv != null && Objects.equals(cv, pv))) {
11721171
oldVal = pv;
11731172
if (value != null)
11741173
p.val = value;
@@ -1372,15 +1371,15 @@ public boolean equals(Object o) {
13721371
for (Node<K,V> p; (p = it.advance()) != null; ) {
13731372
V val = p.val;
13741373
Object v = m.get(p.key);
1375-
if (v == null || (v != val && !v.equals(val)))
1374+
if (!Objects.equals(val, v))
13761375
return false;
13771376
}
13781377
for (Map.Entry<?,?> e : m.entrySet()) {
13791378
Object mk, mv, v;
13801379
if ((mk = e.getKey()) == null ||
13811380
(mv = e.getValue()) == null ||
13821381
(v = get(mk)) == null ||
1383-
(mv != v && !mv.equals(v)))
1382+
!Objects.equals(mv, v))
13841383
return false;
13851384
}
13861385
}
@@ -1504,8 +1503,7 @@ private void readObject(java.io.ObjectInputStream s)
15041503
Node<K,V> q; K qk;
15051504
for (q = first; q != null; q = q.next) {
15061505
if (q.hash == h &&
1507-
((qk = q.key) == k ||
1508-
(qk != null && k.equals(qk)))) {
1506+
((qk = q.key) != null && Objects.equals(k, qk))) {
15091507
insertAtFront = false;
15101508
break;
15111509
}
@@ -1734,7 +1732,7 @@ else if ((f = tabAt(tab, i = (n - 1) & h)) == null) {
17341732
else if ((fh = f.hash) == MOVED)
17351733
tab = helpTransfer(tab, f);
17361734
else if (fh == h // check first node without acquiring lock
1737-
&& ((fk = f.key) == key || (fk != null && key.equals(fk)))
1735+
&& ((fk = f.key) != null && Objects.equals(key, fk))
17381736
&& (fv = f.val) != null)
17391737
return fv;
17401738
else {
@@ -1839,8 +1837,7 @@ else if ((fh = f.hash) == MOVED)
18391837
for (Node<K,V> e = f, pred = null;; ++binCount) {
18401838
K ek;
18411839
if (e.hash == h &&
1842-
((ek = e.key) == key ||
1843-
(ek != null && key.equals(ek)))) {
1840+
((ek = e.key) != null && Objects.equals(key, ek))) {
18441841
val = remappingFunction.apply(key, e.val);
18451842
if (val != null)
18461843
e.val = val;
@@ -1951,8 +1948,7 @@ else if ((fh = f.hash) == MOVED)
19511948
for (Node<K,V> e = f, pred = null;; ++binCount) {
19521949
K ek;
19531950
if (e.hash == h &&
1954-
((ek = e.key) == key ||
1955-
(ek != null && key.equals(ek)))) {
1951+
((ek = e.key) != null && Objects.equals(key, ek))) {
19561952
val = remappingFunction.apply(key, e.val);
19571953
if (val != null)
19581954
e.val = val;
@@ -2067,8 +2063,7 @@ else if ((fh = f.hash) == MOVED)
20672063
for (Node<K,V> e = f, pred = null;; ++binCount) {
20682064
K ek;
20692065
if (e.hash == h &&
2070-
((ek = e.key) == key ||
2071-
(ek != null && key.equals(ek)))) {
2066+
((ek = e.key) != null && Objects.equals(key, ek))) {
20722067
val = remappingFunction.apply(e.val, value);
20732068
if (val != null)
20742069
e.val = val;
@@ -2261,7 +2256,7 @@ Node<K,V> find(int h, Object k) {
22612256
for (;;) {
22622257
int eh; K ek;
22632258
if ((eh = e.hash) == h &&
2264-
((ek = e.key) == k || (ek != null && k.equals(ek))))
2259+
((ek = e.key) != null && Objects.equals(k, ek)))
22652260
return e;
22662261
if (eh < 0) {
22672262
if (e instanceof ForwardingNode) {
@@ -2756,7 +2751,7 @@ final TreeNode<K,V> findTreeNode(int h, Object k, Class<?> kc) {
27562751
p = pl;
27572752
else if (ph < h)
27582753
p = pr;
2759-
else if ((pk = p.key) == k || (pk != null && k.equals(pk)))
2754+
else if ((pk = p.key) != null && Objects.equals(k, pk))
27602755
return p;
27612756
else if (pl == null)
27622757
p = pr;
@@ -2907,7 +2902,7 @@ final Node<K,V> find(int h, Object k) {
29072902
int s; K ek;
29082903
if (((s = lockState) & (WAITER|WRITER)) != 0) {
29092904
if (e.hash == h &&
2910-
((ek = e.key) == k || (ek != null && k.equals(ek))))
2905+
((ek = e.key) != null && Objects.equals(k, ek)))
29112906
return e;
29122907
e = e.next;
29132908
}
@@ -2947,7 +2942,7 @@ else if ((ph = p.hash) > h)
29472942
dir = -1;
29482943
else if (ph < h)
29492944
dir = 1;
2950-
else if ((pk = p.key) == k || (pk != null && k.equals(pk)))
2945+
else if ((pk = p.key) != null && Objects.equals(k, pk))
29512946
return p;
29522947
else if ((kc == null &&
29532948
(kc = comparableClassFor(k)) == null) ||
@@ -3546,8 +3541,8 @@ public boolean equals(Object o) {
35463541
return ((o instanceof Map.Entry) &&
35473542
(k = (e = (Map.Entry<?,?>)o).getKey()) != null &&
35483543
(v = e.getValue()) != null &&
3549-
(k == key || k.equals(key)) &&
3550-
(v == val || v.equals(val)));
3544+
Objects.equals(k, key) &&
3545+
Objects.equals(v, val));
35513546
}
35523547

35533548
/**

0 commit comments

Comments
 (0)