in graphjet-core/src/main/java/com/twitter/graphjet/hashing/SmallArrayBasedLongToDoubleMap.java [162:208]
public boolean put(long key, double value, long metadata) {
boolean isUniqueKey = true;
// If the size of the array is less than ADD_KEYS_TO_SET_THRESHOLD, check against each element
// in the array for dedupping.
if (size < ADD_KEYS_TO_SET_THRESHOLD) {
for (int i = 0; i < size; i++) {
if (key == keys[i]) {
isUniqueKey = false;
if (metadata == metadataArray[i]) {
return false;
}
}
}
} else {
// If the size of the array is no less than ADD_KEYS_TO_SET_THRESHOLD, check against
// keyMetadataPairSet for dedupping.
if (keySet == null) {
keySet = new LongOpenHashSet(keys, 0.75f /* load factor */);
keyMetadataPairSet = new ObjectOpenHashSet<>();
for (int i = 0; i < size; i++) {
keyMetadataPairSet.add(new Pair(keys[i], metadataArray[i]));
}
}
Pair pair = new Pair(key, metadata);
if (keyMetadataPairSet.contains(pair)) {
return false;
} else {
isUniqueKey = keySet.add(key);
keyMetadataPairSet.add(pair);
}
}
if (size == capacity) {
capacity = 2 * capacity;
copy(capacity, size);
}
if (isUniqueKey) uniqueKeysSize++;
keys[size] = key;
values[size] = value;
metadataArray[size] = metadata;
size++;
return true;
}