|
1 | 1 | /* |
2 | | - * Copyright 2002-2017 the original author or authors. |
| 2 | + * Copyright 2002-2018 the original author or authors. |
3 | 3 | * |
4 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | 5 | * you may not use this file except in compliance with the License. |
@@ -223,18 +223,27 @@ protected int getHash(Object o) { |
223 | 223 |
|
224 | 224 | @Override |
225 | 225 | public V get(Object key) { |
226 | | - Reference<K, V> reference = getReference(key, Restructure.WHEN_NECESSARY); |
227 | | - Entry<K, V> entry = (reference != null ? reference.get() : null); |
| 226 | + Entry<K, V> entry = getEntryIfAvailable(key); |
228 | 227 | return (entry != null ? entry.getValue() : null); |
229 | 228 | } |
230 | 229 |
|
| 230 | + @Override |
| 231 | + public V getOrDefault(Object key, V defaultValue) { |
| 232 | + Entry<K, V> entry = getEntryIfAvailable(key); |
| 233 | + return (entry != null ? entry.getValue() : defaultValue); |
| 234 | + } |
| 235 | + |
231 | 236 | @Override |
232 | 237 | public boolean containsKey(Object key) { |
233 | | - Reference<K, V> reference = getReference(key, Restructure.WHEN_NECESSARY); |
234 | | - Entry<K, V> entry = (reference != null ? reference.get() : null); |
| 238 | + Entry<K, V> entry = getEntryIfAvailable(key); |
235 | 239 | return (entry != null && ObjectUtils.nullSafeEquals(entry.getKey(), key)); |
236 | 240 | } |
237 | 241 |
|
| 242 | + private Entry<K, V> getEntryIfAvailable(Object key) { |
| 243 | + Reference<K, V> reference = getReference(key, Restructure.WHEN_NECESSARY); |
| 244 | + return (reference != null ? reference.get() : null); |
| 245 | + } |
| 246 | + |
238 | 247 | /** |
239 | 248 | * Return a {@link Reference} to the {@link Entry} for the specified {@code key}, |
240 | 249 | * or {@code null} if not found. |
@@ -582,17 +591,18 @@ protected final void restructureIfNecessary(boolean allowResize) { |
582 | 591 | } |
583 | 592 |
|
584 | 593 | private Reference<K, V> findInChain(Reference<K, V> reference, Object key, int hash) { |
585 | | - while (reference != null) { |
586 | | - if (reference.getHash() == hash) { |
587 | | - Entry<K, V> entry = reference.get(); |
| 594 | + Reference<K, V> currRef = reference; |
| 595 | + while (currRef != null) { |
| 596 | + if (currRef.getHash() == hash) { |
| 597 | + Entry<K, V> entry = currRef.get(); |
588 | 598 | if (entry != null) { |
589 | 599 | K entryKey = entry.getKey(); |
590 | | - if (entryKey == key || entryKey.equals(key)) { |
591 | | - return reference; |
| 600 | + if (ObjectUtils.nullSafeEquals(entryKey, key)) { |
| 601 | + return currRef; |
592 | 602 | } |
593 | 603 | } |
594 | 604 | } |
595 | | - reference = reference.getNext(); |
| 605 | + currRef = currRef.getNext(); |
596 | 606 | } |
597 | 607 | return null; |
598 | 608 | } |
|
0 commit comments