public boolean put()

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;
  }