public boolean contains(Object o) { if (!(o instanceof Map.Entry)) return false; Map.Entry e = (Map.Entry) o; Entry candidate = getEntry(e.getKey()); return candidate != null && candidate.equals(e); }
public boolean equals(Object o) { if (!(o instanceof Map.Entry)) return false; Map.Entry e = (Map.Entry) o; Object k1 = getKey(); Object k2 = e.getKey(); if (k1 == k2 || (k1 != null && k1.equals(k2))) { Object v1 = getValue(); Object v2 = e.getValue(); if (v1 == v2 || (v1 != null && v1.equals(v2))) return true; } return false; }
/** * Special version of remove for EntrySet. */ private Entry removeMapping(Object o) { if (!(o instanceof Map.Entry)) return null; Map.Entry entry = (Map.Entry) o; Object k = maskNull(entry.getKey()); int hash = hash(k); synchronized (this) { int i = hash & (table.length - 1); Entry e = table[i]; if (e == null) return null; if (e.hash == hash && e.equals(entry)) { size--; table[i] = e.next; return e; } Entry prev = e; for (e = e.next; e != null; prev = e, e = e.next) { if (e.hash == hash && e.equals(entry)) { size--; prev.next = e.next; return e; } } } return null; }
/** * Rehashes the contents of this map into a new <tt>ConcurrentHashMap</tt> * instance with a larger capacity. This method is called automatically when * the number of keys in this map exceeds its capacity and load factor. * * @param newCapacity the new capacity, MUST be a power of two. */ private void resize(int newCapacity) { // assert(newCapacity & -newCapacity) == newCapacity; // power of 2 Entry[] oldTable = table; int oldCapacity = oldTable.length; // check if needed if (size < threshold || oldCapacity > newCapacity) return; Entry[] newTable = new Entry[newCapacity]; int mask = newCapacity - 1; for (int i = oldCapacity; i-- > 0;) { for (Entry e = oldTable[i]; e != null; e = e.next) { Entry clone = (Entry) e.clone(); int j = clone.hash & mask; clone.next = newTable[j]; newTable[j] = clone; } } table = newTable; threshold = (int) (newCapacity * loadFactor); }
/** * Rehashes the contents of this map into a new <tt>ConcurrentHashMap</tt> * instance with a larger capacity. This method is called automatically when * the number of keys in this map exceeds its capacity and load factor. * * @param newCapacity the new capacity, MUST be a power of two. */ private void resize(int newCapacity) { // assert(newCapacity & -newCapacity) == newCapacity; // power of 2 Entry[] oldTable = table; int oldCapacity = oldTable.length; // check if needed if (size < threshold || oldCapacity > newCapacity) return; Entry[] newTable = new Entry[newCapacity]; int mask = newCapacity - 1; for (int i = oldCapacity; i-- > 0;) { for (Entry e = oldTable[i]; e != null; e = e.next) { Entry clone = (Entry) e.clone(); int j = clone.hash & mask; clone.next = newTable[j]; newTable[j] = clone; } } table = newTable; threshold = (int) (newCapacity * loadFactor); }
/** * Special version of remove for EntrySet. */ private Entry removeMapping(Object o) { if (!(o instanceof Map.Entry)) return null; Map.Entry entry = (Map.Entry) o; Object k = maskNull(entry.getKey()); int hash = hash(k); synchronized (this) { int i = hash & (table.length - 1); Entry e = table[i]; if (e == null) return null; if (e.hash == hash && e.equals(entry)) { size--; table[i] = e.next; return e; } Entry prev = e; for (e = e.next; e != null; prev = e, e = e.next) { if (e.hash == hash && e.equals(entry)) { size--; prev.next = e.next; return e; } } } return null; }
/** * Rehashes the contents of this map into a new <tt>ConcurrentHashMap</tt> * instance with a larger capacity. This method is called automatically when * the number of keys in this map exceeds its capacity and load factor. * * @param newCapacity the new capacity, MUST be a power of two. */ private void resize(int newCapacity) { // assert(newCapacity & -newCapacity) == newCapacity; // power of 2 Entry[] oldTable = table; int oldCapacity = oldTable.length; // check if needed if (size < threshold || oldCapacity > newCapacity) return; Entry[] newTable = new Entry[newCapacity]; int mask = newCapacity - 1; for (int i = oldCapacity; i-- > 0;) { for (Entry e = oldTable[i]; e != null; e = e.next) { Entry clone = (Entry) e.clone(); int j = clone.hash & mask; clone.next = newTable[j]; newTable[j] = clone; } } table = newTable; threshold = (int) (newCapacity * loadFactor); }
/** * Special version of remove for EntrySet. */ private Entry removeMapping(Object o) { if (!(o instanceof Map.Entry)) return null; Map.Entry entry = (Map.Entry) o; Object k = maskNull(entry.getKey()); int hash = hash(k); synchronized (this) { int i = hash & (table.length - 1); Entry e = table[i]; if (e == null) return null; if (e.hash == hash && e.equals(entry)) { size--; table[i] = e.next; return e; } Entry prev = e; for (e = e.next; e != null; prev = e, e = e.next) { if (e.hash == hash && e.equals(entry)) { size--; prev.next = e.next; return e; } } } return null; }
protected Entry createEntry(int h, Object k, Object v, Entry n) { return new Entry(h, k, v, n); }
protected Entry createEntry(int h, Object k, Object v, Entry n) { return new Entry(h, k, v, n); }
protected Entry createEntry(int h, Object k, Object v, Entry n) { return new Entry(h, k, v, n); }
public boolean equals(Object o) { if (!(o instanceof Map.Entry)) return false; Map.Entry e = (Map.Entry) o; Object k1 = getKey(); Object k2 = e.getKey(); if (k1 == k2 || (k1 != null && k1.equals(k2))) { Object v1 = getValue(); Object v2 = e.getValue(); if (v1 == v2 || (v1 != null && v1.equals(v2))) return true; } return false; }
protected Object clone() { // It is the callers responsibility to set the next field // correctly. return new Entry(hash, key, value, null); } }
public boolean equals(Object o) { if (!(o instanceof Map.Entry)) return false; Map.Entry e = (Map.Entry) o; Object k1 = getKey(); Object k2 = e.getKey(); if (k1 == k2 || (k1 != null && k1.equals(k2))) { Object v1 = getValue(); Object v2 = e.getValue(); if (v1 == v2 || (v1 != null && v1.equals(v2))) return true; } return false; }
protected Object clone() { // It is the callers responsibility to set the next field // correctly. return new Entry(hash, key, value, null); } }
protected Object clone() { // It is the callers responsibility to set the next field // correctly. return new Entry(hash, key, value, null); } }
public boolean contains(Object o) { if (!(o instanceof Map.Entry)) return false; Map.Entry e = (Map.Entry) o; Entry candidate = getEntry(e.getKey()); return candidate != null && candidate.equals(e); }