Могу ли я иметь набор, содержащий идентичные элементы? - PullRequest
0 голосов
/ 28 марта 2010

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

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

Ответы [ 4 ]

4 голосов
/ 28 марта 2010

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

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

http://google -collections.googlecode.com / SVN / багажник / Javadoc / COM / Google / общие / собирать / Multiset.html

2 голосов
/ 28 марта 2010

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

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

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

1 голос
/ 28 марта 2010

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

0 голосов
/ 28 марта 2010

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

...