1213 Node<K,V> old = null;
1214 if (size > threshold || (tab = table) == null ||
1215 (n = tab.length) == 0)
1216 n = (tab = resize()).length;
1217 if ((first = tab[i = (n - 1) & hash]) != null) {
1218 if (first instanceof TreeNode)
1219 old = (t = (TreeNode<K,V>)first).getTreeNode(hash, key);
1220 else {
1221 Node<K,V> e = first; K k;
1222 do {
1223 if (e.hash == hash &&
1224 ((k = e.key) == key || (key != null && key.equals(k)))) {
1225 old = e;
1226 break;
1227 }
1228 ++binCount;
1229 } while ((e = e.next) != null);
1230 }
1231 }
1232 if (old != null) {
1233 V v = remappingFunction.apply(old.value, value);
1234 if (v != null) {
1235 old.value = v;
1236 afterNodeAccess(old);
1237 }
1238 else
1239 removeNode(hash, key, null, false, true);
1240 return v;
1241 }
1242 if (value != null) {
1243 if (t != null)
1244 t.putTreeVal(this, tab, hash, key, value);
1245 else {
1246 tab[i] = newNode(hash, key, value, first);
1247 if (binCount >= TREEIFY_THRESHOLD - 1)
1248 treeifyBin(tab, hash);
1249 }
1250 ++modCount;
1251 ++size;
1252 afterNodeInsertion(true);
1253 }
|
1213 Node<K,V> old = null;
1214 if (size > threshold || (tab = table) == null ||
1215 (n = tab.length) == 0)
1216 n = (tab = resize()).length;
1217 if ((first = tab[i = (n - 1) & hash]) != null) {
1218 if (first instanceof TreeNode)
1219 old = (t = (TreeNode<K,V>)first).getTreeNode(hash, key);
1220 else {
1221 Node<K,V> e = first; K k;
1222 do {
1223 if (e.hash == hash &&
1224 ((k = e.key) == key || (key != null && key.equals(k)))) {
1225 old = e;
1226 break;
1227 }
1228 ++binCount;
1229 } while ((e = e.next) != null);
1230 }
1231 }
1232 if (old != null) {
1233 V v;
1234 if(old.value != null)
1235 v = remappingFunction.apply(old.value, value);
1236 else
1237 v = value;
1238 if (v != null) {
1239 old.value = v;
1240 afterNodeAccess(old);
1241 }
1242 else
1243 removeNode(hash, key, null, false, true);
1244 return v;
1245 }
1246 if (value != null) {
1247 if (t != null)
1248 t.putTreeVal(this, tab, hash, key, value);
1249 else {
1250 tab[i] = newNode(hash, key, value, first);
1251 if (binCount >= TREEIFY_THRESHOLD - 1)
1252 treeifyBin(tab, hash);
1253 }
1254 ++modCount;
1255 ++size;
1256 afterNodeInsertion(true);
1257 }
|