Подтвердить что ты не робот

Примитивная альтернатива Guava Table

Есть ли альтернатива таблицы Guava, которая использует примитивы вместо общих типов в качестве ключей?

Я хотел бы использовать примитивы, чтобы избежать автоматического бокса, вызванного использованием номеров Java и дополнительных объектов ввода, созданных Java-картами.

Я применил собственный базовый LongLongObjectTable, используя Trogo TLongObjectMap, но предпочел бы использовать стандартную библиотеку, если она доступна.

private static class LongLongObjectTable<T> {
    private final TLongObjectMap<TLongObjectMap<T>> backingMap = new TLongObjectHashMap<>();

    T get(final long rowKey, final long columnKey) {
        final TLongObjectMap<T> map = this.backingMap.get(rowKey);
        if (map == null) {
            return null;
        }
        return map.get(columnKey);
    }

    void put(final long rowKey, final long columnKey, final T value) {
        TLongObjectMap<T> map = this.backingMap.get(rowKey);
        if (map == null) {
            map = new TLongObjectHashMap<>();
            this.backingMap.put(rowKey, map);
        }
        map.put(columnKey, value);
    }

    Collection<T> values() {
        final List<T> values = new ArrayList<T>();
        for (final TLongObjectMap<T> map : this.backingMap.valueCollection()) {
            values.addAll(map.valueCollection());
        }
        return values;
    }
}
4b9b3361

Ответ 1

Не совсем. Проблема в том, что такие реализации неизбежно не являются универсальными (по определению) и должны определяться один за другим. Это означает значительное повторение и, возможно, множество возможных перестановок.

Тем не менее, другие языки позволяют это, заставляя компилятор генерировать код для экземпляров коллекции с типом T, а не использовать type erasure, но это не направление, в которое пошел java.

Тот факт, что вы можете использовать варианты с короткими коробочками, такие как Long или Integer, в существующей коллекции, достаточно хорош для подавляющего большинства случаев, поскольку накладные расходы относительно низки. Кроме того, разработчики стандартной библиотеки, вероятно, предпочитают держать ее стройной, а не загрязнять ее дополнительными пользовательскими вариантами.