@Override public int hashCode() { return (int) hash(first, second); }
private static void insertKeyValueNoLock(long[] table, int capacity, long item1, long item2) { int bucket = signSafeMod(hash(item1, item2), capacity); while (true) { long storedKey = table[bucket]; if (storedKey == EmptyItem) { // The bucket is empty, so we can use it table[bucket] = item1; table[bucket + 1] = item2; return; } bucket = (bucket + 2) & (table.length - 1); } } }
/** * Remove an existing entry if found * * @param item1 * @return true if removed or false if item was not present */ public boolean remove(long item1, long item2) { checkBiggerEqualZero(item1); long h = hash(item1, item2); return getSection(h).remove(item1, item2, (int) h); }
private int removeIf(LongPairPredicate filter) { Objects.requireNonNull(filter); int removedItems = 0; // Go through all the buckets for this section for (int bucket = 0; bucket < table.length; bucket += 2) { long storedItem1 = table[bucket]; long storedItem2 = table[bucket + 1]; if (storedItem1 != DeletedItem && storedItem1 != EmptyItem) { if (filter.test(storedItem1, storedItem2)) { long h = hash(storedItem1, storedItem2); if (remove(storedItem1, storedItem2, (int) h)) { removedItems++; } } } } return removedItems; }
public boolean add(long item1, long item2) { checkBiggerEqualZero(item1); long h = hash(item1, item2); return getSection(h).add(item1, item2, (int) h); }
public boolean contains(long item1, long item2) { checkBiggerEqualZero(item1); long h = hash(item1, item2); return getSection(h).contains(item1, item2, (int) h); }