@ -224,23 +224,23 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
@@ -224,23 +224,23 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
@Override
public V get ( Object key ) {
Reference < K , V > reference = getReference ( key , Restructure . WHEN_NECESSARY ) ;
Entry < K , V > entry = ( reference = = null ? null : reference . get ( ) ) ;
Entry < K , V > entry = ( reference ! = null ? reference . get ( ) : null ) ;
return ( entry ! = null ? entry . getValue ( ) : null ) ;
}
@Override
public boolean containsKey ( Object key ) {
Reference < K , V > reference = getReference ( key , Restructure . WHEN_NECESSARY ) ;
Entry < K , V > entry = ( reference = = null ? null : reference . get ( ) ) ;
Entry < K , V > entry = ( reference ! = null ? reference . get ( ) : null ) ;
return ( entry ! = null & & ObjectUtils . nullSafeEquals ( entry . getKey ( ) , key ) ) ;
}
/ * *
* Returns a { @link Reference } to the { @link Entry } for the specified { @code key } or
* { @code null } if not found .
* Return a { @link Reference } to the { @link Entry } for the specified { @code key } ,
* or { @code null } if not found .
* @param key the key ( can be { @code null } )
* @param restructure types of restructure allowed during this call
* @return the reference or { @code null }
* @return the reference , or { @code null } if not found
* /
protected final Reference < K , V > getReference ( Object key , Restructure restructure ) {
int hash = getHash ( key ) ;
@ -400,14 +400,10 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
@@ -400,14 +400,10 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
* /
public static enum ReferenceType {
/ * *
* Use { @link SoftReference } s .
* /
/** Use {@link SoftReference}s */
SOFT ,
/ * *
* Use { @link WeakReference } s .
* /
/** Use {@link WeakReference}s */
WEAK
}
@ -462,8 +458,8 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
@@ -462,8 +458,8 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
}
/ * *
* Apply an update operation to this segment . The segment will be locked
* during update .
* Apply an update operation to this segment .
* The segment will be locked during the update .
* @param hash the hash of the key
* @param key the key
* @param task the update operation
@ -474,7 +470,7 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
@@ -474,7 +470,7 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
if ( task . hasOption ( TaskOption . RESTRUCTURE_BEFORE ) ) {
restructureIfNecessary ( resize ) ;
}
if ( task . hasOption ( TaskOption . SKIP_IF_EMPTY ) & & ( this . count = = 0 ) ) {
if ( task . hasOption ( TaskOption . SKIP_IF_EMPTY ) & & this . count = = 0 ) {
return task . execute ( null , null , null ) ;
}
lock ( ) ;
@ -482,12 +478,12 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
@@ -482,12 +478,12 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
final int index = getIndex ( hash , this . references ) ;
final Reference < K , V > head = this . references [ index ] ;
Reference < K , V > reference = findInChain ( head , key , hash ) ;
Entry < K , V > entry = ( reference = = null ? null : reference . get ( ) ) ;
Entry < K , V > entry = ( reference ! = null ? reference . get ( ) : null ) ;
Entries entries = new Entries ( ) {
@Override
public void add ( V value ) {
@SuppressWarnings ( "unchecked" )
Entry < K , V > newEntry = new Entry < K , V > ( ( K ) key , value ) ;
Entry < K , V > newEntry = new Entry < K , V > ( ( K ) key , value ) ;
Reference < K , V > newReference = Segment . this . referenceManager . createReference ( newEntry , hash , head ) ;
Segment . this . references [ index ] = newReference ;
Segment . this . count + + ;
@ -514,7 +510,8 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
@@ -514,7 +510,8 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
try {
setReferences ( createReferenceArray ( this . initialSize ) ) ;
this . count = 0 ;
} finally {
}
finally {
unlock ( ) ;
}
}
@ -545,16 +542,16 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
@@ -545,16 +542,16 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
// Recalculate taking into account count inside lock and items that
// will be purged
needsResize = ( ( countAfterRestructure > 0 ) & & ( countAfterRestructure > = this . resizeThreshold ) ) ;
needsResize = ( countAfterRestructure > 0 & & countAfterRestructure > = this . resizeThreshold ) ;
boolean resizing = false ;
int restructureSize = this . references . length ;
if ( allowResize & & needsResize & & ( restructureSize < MAXIMUM_SEGMENT_SIZE ) ) {
if ( allowResize & & needsResize & & restructureSize < MAXIMUM_SEGMENT_SIZE ) {
restructureSize < < = 1 ;
resizing = true ;
}
// Either create a new table or reuse the existing one
Reference < K , V > [ ] restructured = ( resizing ? createReferenceArray ( restructureSize ) : this . references ) ;
Reference < K , V > [ ] restructured = ( resizing ? createReferenceArray ( restructureSize ) : this . references ) ;
// Restructure
for ( int i = 0 ; i < this . references . length ; i + + ) {
@ -578,7 +575,8 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
@@ -578,7 +575,8 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
setReferences ( restructured ) ;
}
this . count = Math . max ( countAfterRestructure , 0 ) ;
} finally {
}
finally {
unlock ( ) ;
}
}
@ -606,7 +604,7 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
@@ -606,7 +604,7 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
}
private int getIndex ( int hash , Reference < K , V > [ ] references ) {
return hash & ( references . length - 1 ) ;
return ( hash & ( references . length - 1 ) ) ;
}
/ * *
@ -700,27 +698,26 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
@@ -700,27 +698,26 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
@Override
public String toString ( ) {
return this . key + "=" + this . value ;
return ( this . key + "=" + this . value ) ;
}
@Override
@SuppressWarnings ( "rawtypes" )
public final boolean equals ( Object o ) {
if ( o = = this ) {
public final boolean equals ( Object other ) {
if ( this = = other ) {
return true ;
}
if ( o ! = null & & o instanceof Map . Entry ) {
Map . Entry other = ( Map . Entry ) o ;
return ObjectUtils . nullSafeEquals ( getKey ( ) , other . getKey ( ) )
& & ObjectUtils . nullSafeEquals ( getValue ( ) , other . getValue ( ) ) ;
if ( ! ( other instanceof Map . Entry ) ) {
return false ;
}
return false ;
Map . Entry otherEntry = ( Map . Entry ) other ;
return ( ObjectUtils . nullSafeEquals ( getKey ( ) , otherEntry . getKey ( ) ) & &
ObjectUtils . nullSafeEquals ( getValue ( ) , otherEntry . getValue ( ) ) ) ;
}
@Override
public final int hashCode ( ) {
return ObjectUtils . nullSafeHashCode ( this . key )
^ ObjectUtils . nullSafeHashCode ( this . value ) ;
return ( ObjectUtils . nullSafeHashCode ( this . key ) ^ ObjectUtils . nullSafeHashCode ( this . value ) ) ;
}
}
@ -802,7 +799,7 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
@@ -802,7 +799,7 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
if ( o ! = null & & o instanceof Map . Entry < ? , ? > ) {
Map . Entry < ? , ? > entry = ( java . util . Map . Entry < ? , ? > ) o ;
Reference < K , V > reference = ConcurrentReferenceHashMap . this . getReference ( entry . getKey ( ) , Restructure . NEVER ) ;
Entry < K , V > other = ( reference = = null ? null : reference . get ( ) ) ;
Entry < K , V > other = ( reference ! = null ? reference . get ( ) : null ) ;
if ( other ! = null ) {
return ObjectUtils . nullSafeEquals ( entry . getValue ( ) , other . getValue ( ) ) ;
}
@ -855,7 +852,7 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
@@ -855,7 +852,7 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
@Override
public boolean hasNext ( ) {
getNextIfNecessary ( ) ;
return this . next ! = null ;
return ( this . next ! = null ) ;
}
@Override
@ -987,7 +984,6 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
@@ -987,7 +984,6 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
enqueue ( ) ;
clear ( ) ;
}
}
@ -1021,7 +1017,6 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
@@ -1021,7 +1017,6 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
enqueue ( ) ;
clear ( ) ;
}
}
}