|
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