Как создать список уникальных / отличных объектов (без дубликатов) в Java?
Прямо сейчас я использую HashMap<String, Integer>
для этого, поскольку ключ перезаписан, и, следовательно, в конце мы можем получить то, HashMap.getKeySet()
что будет уникальным. Но я уверен, что должен быть лучший способ сделать это, поскольку часть ценности здесь теряется.
источник
Я хочу прояснить некоторые вещи здесь для оригинального плаката, на которые другие ссылались, но на самом деле явно не заявили. Когда вы говорите, что хотите уникальный список, это и есть определение упорядоченного набора. Некоторые другие ключевые различия между интерфейсом Set и интерфейсом List состоят в том, что List позволяет вам указать индекс вставки. Итак, вопрос в том, действительно ли вам нужен интерфейс List (например, для совместимости со сторонней библиотекой и т. Д.), Или вы можете переделать свое программное обеспечение для использования интерфейса Set? Вы также должны учитывать, что вы делаете с интерфейсом. Важно ли находить элементы по их индексу? Сколько элементов вы ожидаете в своем наборе? Если у вас будет много элементов, важен ли их порядок?
Если вам действительно нужен список, который имеет только уникальное ограничение, существует класс Apache Common Utils org.apache.commons.collections.list.SetUniqueList, который предоставит вам интерфейс List и уникальное ограничение. Имейте в виду, что это нарушает интерфейс List. Однако вы получите лучшую производительность, если вам нужно будет искать в списке по индексу. Если вы можете иметь дело с интерфейсом Set и у вас небольшой набор данных, то LinkedHashSet может быть хорошим вариантом. Это просто зависит от дизайна и предназначения вашего программного обеспечения.
Опять же, у каждой коллекции есть свои преимущества и недостатки. Некоторые быстрые вставки, но медленные чтения, некоторые имеют быстрое чтение, но медленные вставки и т. Д. Имеет смысл потратить изрядное количество времени на документацию по коллекциям, чтобы полностью изучить более тонкие детали каждого класса и интерфейса.
источник
Используйте
new HashSet<String>
пример:источник
Вы можете просто использовать a
HashSet<String>
для поддержки коллекции уникальных объектов. ЕслиInteger
значения на вашей карте важны, вы можете вместо этого использоватьcontainsKey
метод карт, чтобы проверить, есть ли ваш ключ уже на карте.источник
HashSet<String>
(или) любаяSet
реализация может сделать эту работу за вас.Set
не допускайте дубликатов.Вот javadoc для HashSet.
источник
Я не знаю, насколько это эффективно, но сработало для меня в простом контексте.
источник
Вы можете использовать один из реализующих классов
java.util.Set<E>
интерфейса, напримерjava.util.HashSet<String>
класс коллекции.источник