Действительно ли возможно позволить двойные ценности в коллекции Набора?
Там какой-либо путь состоит в том, чтобы сделать элементы уникальными и иметь некоторые копии их? Есть ли какие-либо функции для коллекции Набора для того, чтобы иметь двойные ценности в нем?
, когда-либо с учетом использования Java.util.list вместо этого?
В противном случае я бы порекомендовал MultiSet из Google Guava ] (преемник коллекции Google , который этот ответ изначально рекомендовал.).
Я так не думаю. Единственный способ использовать список. Вы также можете трюк с функцией равняться (), Hashcode () или Companeto (), но это будет явным.
-121--3211968-Очень определение установленного отключения дубликатов. Я думаю, что, возможно, вы хотите использовать другую структуру данных, например, список , который позволит DUPS.
Есть ли способ сделать элементы уникальными и иметь некоторые копии из них?
Если по какой-то причине вы действительно делают , нужно хранить дубликаты в наборе, вам понравится обернуть их в каком-то веществе владельца или переопределяют равному () и hashcode () ваших моделей объектов, чтобы они не оценивали как эквивалентные (и даже , что потерпит неудачу, если вы пытаетесь хранить ссылки на ссылки на тот же физический объект несколько раз).
Я думаю, что вам нужно переоценить, что вы пытаетесь сделать здесь, или, по крайней мере, объясните нам более четко.
Из Javadocs:
«Наборы не содержат пары элементов E1 и E2 такое, что E1.equals (E2), а в Большинство
NULL
элемент
, поэтому, если ваши объекты должны были переопределить. Equals () так, чтобы он вернул разные значения для любых объектов, которые вы намереваетесь хранить, то вы можете хранить их отдельно в SET
(вы также должны переопределить hashcode (), а также).
Однако очень определение набора
в Java есть,
«Коллекция, которая не содержит no Дублирующие элементы. «
Так что вы действительно лучше используете список
или что-то еще здесь. Возможно, карта
, если вы хотите хранить дубликаты значений на основе разных клавиш.
Вид Солнца на «Сумки» (AKA MultiSets):
Мы чрезвычайно сочувствуем желанию для безопасных коллекций типа. Вместо добавления «полосовой помощи» в рамках, которые обеспечивают безопасность типа в специальной моде, структура была разработана для сетки со всеми предложениями параметризованных типов, которые в настоящее время обсуждаются. В случае, если на языке добавляются параметризованные типы, все основы коллекции будут поддерживать использование типа компиляции-временного типа, без необходимости явных отливок. К сожалению, это не произойдет в выпуске 1.2. Тем временем люди, которые желают безопасностью типа выполнения, могут реализовать свои собственные функции Gating в «Wrapper», связанные с коллекциями JDK.
( Источник ; Обратите внимание, что это старое и, возможно, устарело.)
Помимо коллекций Google API, вы можете использовать коллекции Apache Commons.
Коллекции Apache Commons:
Я не верю, что вы можете иметь дублирующие значения в пределах набора. Набор определяется как набор уникальных значений. Вам может быть лучше, используя ArrayList.
$ cat foo
1
2
3
4
5
$ sed -e '2d;4d' foo
1
3
5
$
-121--603642- для lolz
Array.Sort(array, ((x,y) => (int.Parse(x.Split('|')[0]) < int.Parse(y.Split('|')[0])) ? -1 : (int.Parse(x.Split('|')[0]) > int.Parse(y.Split('|')[0])) ? 1 : 0));
-121--4577904- Я так не думаю. Единственный способ - использовать список. Вы также можете хитрость с функцией equals (), hashcode () или compeyTo (), но это будет ankward.
Нет шансов .... Вы не можете иметь дубликаты значений в Set Interface ... Если вы хотите дубликаты, вы можете попробовать массив-список
Как уже упоминалось выбрать правильную коллекцию для задачи и, вероятно, список будет то, что вам нужно. Воспитание с равными (), hashcode () или companeto (), чтобы нарушить личность, как правило, является плохой идеей, просто чтобы просто клин экземпляра в неправильную коллекцию для начала. Хуже того, что это может сломать код в других областях приложения, которые зависят от этих методов, создающих допустимые результаты сравнения и очень сложно отладить или отслеживать такие ошибки.
Этот вопрос мне также задавали в интервью.Я думаю, что ответ: конечно, Set не допускает дублирования элементов, и вместо этого для них следует использовать ArrayList или другие коллекции, однако переопределение equals () для типа объекта, хранящегося в наборе, позволит вам управлять сравнением логика. И, следовательно, вы можете хранить повторяющиеся элементы в Set. Это больше похоже на хакер, который позволяет использовать неуникальные элементы в наборе и, конечно же, не рекомендуется в коде производственного уровня.