Реализация списка, который является одновременно Set a List (последовательность)? - PullRequest
7 голосов
/ 13 октября 2010

Я нахожусь в положении расширения LinkedList и реализации Set, так что у меня есть список без дубликатов. Мне интересно, если такая реализация еще не существует?

Все, что я планирую сделать, это переопределить метод add(e), чтобы сначала найти элемент, и, если он есть, не добавлять его. Что-то вроде:

add(E){
   if(get(E) == null) super.add(E);
}

Ответы [ 2 ]

6 голосов
/ 13 октября 2010

Может быть LinkedHashSet делает то, что вы хотите.Он сохраняет элементы в (по умолчанию) порядке вставки.

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

Возвращает значение хэш-кода для этого списка.Хеш-код списка определяется как результат следующих вычислений:

hashCode = 1;
  Iterator i = list.iterator();
  while (i.hasNext()) {
      Object obj = i.next();
      hashCode = 31*hashCode + (obj==null ? 0 : obj.hashCode());
  }

против

Возвращает значение хэш-кода для этого набора.Хеш-код набора определен как сумма хеш-кодов элементов в наборе, где хеш-код нулевого элемента определен равным нулю.Это гарантирует, что s1.equals (s2) подразумевает, что s1.hashCode () == s2.hashCode () для любых двух наборов s1 и s2, как того требует общий контракт метода Object.hashCode.

5 голосов
/ 13 октября 2010

Нет реализации Java в стандартных коллекциях.

Однако вы можете взглянуть на SetUniqueList из Общих коллекций , который может соответствовать тому, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...