1 |
|
/* |
2 |
< |
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. |
2 |
> |
* Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved. |
3 |
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 |
|
* |
5 |
|
* This code is free software; you can redistribute it and/or modify it |
34 |
|
import java.util.function.BiFunction; |
35 |
|
import java.util.function.Consumer; |
36 |
|
import java.util.function.Function; |
37 |
+ |
import jdk.internal.misc.SharedSecrets; |
38 |
|
|
39 |
|
/** |
40 |
|
* Hash table based implementation of the {@code Map} interface. This |
376 |
|
* Returns a power of two size for the given target capacity. |
377 |
|
*/ |
378 |
|
static final int tableSizeFor(int cap) { |
379 |
< |
int n = cap - 1; |
379 |
< |
n |= n >>> 1; |
380 |
< |
n |= n >>> 2; |
381 |
< |
n |= n >>> 4; |
382 |
< |
n |= n >>> 8; |
383 |
< |
n |= n >>> 16; |
379 |
> |
int n = -1 >>> Integer.numberOfLeadingZeros(cap - 1); |
380 |
|
return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1; |
381 |
|
} |
382 |
|
|
1263 |
|
@Override |
1264 |
|
public V merge(K key, V value, |
1265 |
|
BiFunction<? super V, ? super V, ? extends V> remappingFunction) { |
1266 |
< |
if (value == null) |
1271 |
< |
throw new NullPointerException(); |
1272 |
< |
if (remappingFunction == null) |
1266 |
> |
if (value == null || remappingFunction == null) |
1267 |
|
throw new NullPointerException(); |
1268 |
|
int hash = hash(key); |
1269 |
|
Node<K,V>[] tab; Node<K,V> first; int n, i; |
1306 |
|
else |
1307 |
|
removeNode(hash, key, null, false, true); |
1308 |
|
return v; |
1309 |
< |
} |
1316 |
< |
if (value != null) { |
1309 |
> |
} else { |
1310 |
|
if (t != null) |
1311 |
|
t.putTreeVal(this, tab, hash, key, value); |
1312 |
|
else { |
1317 |
|
++modCount; |
1318 |
|
++size; |
1319 |
|
afterNodeInsertion(true); |
1320 |
+ |
return value; |
1321 |
|
} |
1328 |
– |
return value; |
1322 |
|
} |
1323 |
|
|
1324 |
|
@Override |
1441 |
|
float ft = (float)cap * lf; |
1442 |
|
threshold = ((cap < MAXIMUM_CAPACITY && ft < MAXIMUM_CAPACITY) ? |
1443 |
|
(int)ft : Integer.MAX_VALUE); |
1444 |
+ |
|
1445 |
+ |
// Check Map.Entry[].class since it's the nearest public type to |
1446 |
+ |
// what we're actually creating. |
1447 |
+ |
SharedSecrets.getJavaObjectInputStreamAccess().checkArray(s, Map.Entry[].class, cap); |
1448 |
|
@SuppressWarnings({"rawtypes","unchecked"}) |
1449 |
|
Node<K,V>[] tab = (Node<K,V>[])new Node[cap]; |
1450 |
|
table = tab; |
2145 |
|
if (replacement != p) { |
2146 |
|
TreeNode<K,V> pp = replacement.parent = p.parent; |
2147 |
|
if (pp == null) |
2148 |
< |
root = replacement; |
2148 |
> |
(root = replacement).red = false; |
2149 |
|
else if (p == pp.left) |
2150 |
|
pp.left = replacement; |
2151 |
|
else |