--- jsr166/src/main/java/util/HashMap.java 2017/10/22 17:44:03 1.3
+++ jsr166/src/main/java/util/HashMap.java 2018/10/01 00:10:53 1.8
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -118,7 +118,7 @@ import jdk.internal.misc.SharedSecrets;
* should be used only to detect bugs.
*
*
This class is a member of the
- *
+ *
* Java Collections Framework.
*
* @param the type of keys maintained by this map
@@ -376,12 +376,7 @@ public class HashMap extends Abstra
* Returns a power of two size for the given target capacity.
*/
static final int tableSizeFor(int cap) {
- int n = cap - 1;
- n |= n >>> 1;
- n |= n >>> 2;
- n |= n >>> 4;
- n |= n >>> 8;
- n |= n >>> 16;
+ int n = -1 >>> Integer.numberOfLeadingZeros(cap - 1);
return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
}
@@ -1268,9 +1263,7 @@ public class HashMap extends Abstra
@Override
public V merge(K key, V value,
BiFunction super V, ? super V, ? extends V> remappingFunction) {
- if (value == null)
- throw new NullPointerException();
- if (remappingFunction == null)
+ if (value == null || remappingFunction == null)
throw new NullPointerException();
int hash = hash(key);
Node[] tab; Node first; int n, i;
@@ -1313,8 +1306,7 @@ public class HashMap extends Abstra
else
removeNode(hash, key, null, false, true);
return v;
- }
- if (value != null) {
+ } else {
if (t != null)
t.putTreeVal(this, tab, hash, key, value);
else {
@@ -1325,8 +1317,8 @@ public class HashMap extends Abstra
++modCount;
++size;
afterNodeInsertion(true);
+ return value;
}
- return value;
}
@Override
@@ -2153,7 +2145,7 @@ public class HashMap extends Abstra
if (replacement != p) {
TreeNode pp = replacement.parent = p.parent;
if (pp == null)
- root = replacement;
+ (root = replacement).red = false;
else if (p == pp.left)
pp.left = replacement;
else