2010-03-28 3 views
0

Удобно использовать набор. Мне нравится, как я могу «добавить» («удалить») элемент в (из) набора. Также удобно проверить, находится ли данный элемент в наборе.Могу ли я иметь набор, содержащий идентичные элементы?

Единственная проблема, я обнаружил, что я не могу добавить новый элемент в набор, если в наборе уже есть такой элемент. Возможно ли иметь «наборы», которые могут содержать несколько одинаковых элементов.

+1

Почему вы хотите иметь одинаковые элементы? –

ответ

4

Вы должны использовать MultiSet или HashMap, где вы сохраняете количество элементов.

p.s. с HashMap вы еще делаете добавления/удаления с O (журнал п) операций

http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Multiset.html

+1

MultiSet выглядит очень полезно - не могу подсчитать, сколько раз я написал код для создания карты , чтобы подсчитать количество вхождений объектов в другой тип коллекции. +1 для увеличения моих знаний –

2

A Заданная может быть не лучший выбор коллекций для вас, если вы хотите дубликаты. Наборы, by definition, не разрешены:

Коллекция, которая не содержит дубликатов элементов. Более формально множества не содержат пары элементов e1 и e2 таких, что e1.equals(e2) и не более одного нулевого элемента. Как видно из его названия, этот интерфейс моделирует математическую абстрактную абстракцию.

Если у вас есть сложный случай использования, который действительно требует использования Set (в этом случае вы можете использовать MultiSet, как @Frostman описано выше), вы могли бы быть лучше только с помощью List.

1

Нет необходимости хранить элементы несколько раз, если они идентичны. Если вы хотите отслеживать, сколько экземпляров каждого элемента у вас есть, вам лучше использовать Map.

0

A Set по определению не может иметь повторяющиеся элементы. «Дубликат» определяется равенством элемента (см. Его методы equals и hashCode). Если вы хотите дублировать, используйте Collection, который позволяет дублировать, например ArrayList.

Смежные вопросы