Класс, описывающий неизменный упорядоченный набор

Мне нужно некоторое имя класса / интерфейса, которое описывает неизменный, упорядоченный набор (в порядке ввода, например, LinkedHashSet). Конечно, я могу использовать класс следующим образом:

class Foo {
    public final Set<Long> frozenOrderedSet;

    public Foo(List<Long> input) {
        frozenOrderedSet = Collections.unmodifiableSet(new LinkedHashSet(input));
    }
}

Но это не прояснило бы мой подход. Я хотел бы прояснить для всех, кто читает исходный текст, что Набор является неизменяемым и уникальным при сохранении его порядка с for(Long l : set){},

3 ответа

Решение

Неизменный набор Guava обеспечивает a high-performance, immutable Set with reliable, user-specified iteration order. Есть также варианты, такие как ImmutableSortedSet.

Простейшим способом было бы расширить Set для создания настраиваемого неизменяемого Set.

public CustomImmutableSet () {return Collections.unmodifiableSet (new LinkedHashSet (input)); }

Таким образом, всем, читающим источник, станет ясно, что Набор не подлежит изменению и уникален.

Божо, о котором идет речь

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

Неизменяемые коллекции не могут быть изменены вообще - они не оборачивают другую коллекцию - у них есть свои собственные элементы.

Вот цитата из ImmutableList Гуавы

В отличие от Collections.unmodifiableList (java.util.List), который является представлением отдельной коллекции, которая все еще может изменяться, экземпляр ImmutableList содержит свои собственные личные данные и никогда не изменится.

Таким образом, в основном, чтобы получить неизменяемую коллекцию из изменяемой, вы должны скопировать ее элементы в новую коллекцию и запретить все операции.

Так что в основном вы можете создать подкласс класса TreeSet и переопределить все: добавить, удалить и т. д. методы просто выбросить исключение, сказав, что это неизменный набор. Также вам нужно создать конструктор копирования в этом классе с одним параметром TreeSet setToCopyFrom,

Другие вопросы по тегам