Java: список, що містить в своєму розпорядженні унікальні елементи

Чи є тип списку у java, який зберігає об'єкти в порядку зростання і не додає, якщо раніше цей об'єкт був доданий. Я знаю, що Java-карти можуть це зробити, але мені цікаво, чи є тип списку, який робить те, що я хочу. В іншому випадку я повинен перевизначити вміст, equalsTo і додавати методи, чи не так?

19
Y U NO використовувати встановити?
додано Автор r15habh, джерело
Потім виведіть ArrayList та замінити методами add . Додайте до нього об'єкт, використовуючи метод contains . Замовлення означає доступ за індексом (як-от список) правильно?
додано Автор Prince John Wesley, джерело
Ні, ви не повинні перевизначати вміст, оскільки містить залежить від рівня() типу вмісту. Те, що ви повинні перевизначити, - це метод рівності, який ви хочете зберегти в колекції. (І хеш-код, якщо ви використовуєте хешові колекції). Найкращий вибір - це TreeSet, як уже було сказано. (Або LinkedHashSet, якщо вам потрібно зберегти порядок вставки, а не якийсь природний порядок)
додано Автор zeller, джерело
@Прицесс Джон Уеслі: переоцінка ArrayList не є гарною ідеєю, оскільки списки семантично не відносяться до унікальності. Крім того, є кращі рішення, ніж винахід колеса.
додано Автор zeller, джерело
Який порядок ви маєте на увазі - за вставкою або природним порядком?
додано Автор denis.solonenko, джерело
Мені шкода, що я забув розповісти більше про порядок. Я хочу зберігати мої об'єкти в порядку зростання. дякую вам дорогою для ваших відповідей.
додано Автор meandbobbymcgee, джерело

8 Відповіді

Отже, вам потрібен список, що містить лише унікальні елементи? Два варіанти:

  • java.util.LinkedHashSet - preserves the order of insertion, has the set semantics
  • from commons-collections SetUniquieList - allows list operations like get(..) and set(..)
  • from commons-collections ListOrderedSet
37
додано
Так, його вимога була "зберегти замовлення", який робить LinkedHashSet . І якщо йому потрібен довільний доступ, він може використовувати один із інших варіантів
додано Автор Bozho, джерело
+1 Для того, щоб не повністю ігнорувати вимоги аскета і сказати, що йому потрібен (довільний) набір.
додано Автор G_H, джерело

Залежить від того, який порядок ви маєте на увазі.

14
додано

TreeSet зробить трюк. Приклад:

SortedSet myOrderedUniqueList = new TreeSet()

4
додано

Я думаю, що ви після SortedSet (це інтерфейс, який розширює Set). Набір - як список, але він містить лише одне з кожного значення.

TreeSet - це широко використовувана реалізація SortedSet

http://download.oracle.com/javase/6 /docs/api/java/util/TreeSet.html

4
додано

TreeSet might be exactly what you need.

Він зберігає елементи у сортованому дереві. Таким чином, ви можете переглянути їх у відсортованому порядку. Це не список, але він краще працює щодо додавання та містить.

1
додано

It is not a list, but you can look at implementations of Set http://download.oracle.com/javase/6/docs/api/java/util/Set.html

0
додано

SortedSet - це під-інтерфейс Set, який гарантує, що елементи у наборі сортуються.

SortedSet orderedSet = new TreeSet();

Використовуйте їх, коли вам потрібно зберігати не дублікати елементів у порядку збільшення значень елементів

0
додано

Використовуйте java.util.LinkedHashSet з переопределеним hashCode() і рівним (Object obj), використовуючи унікальні властивості

0
додано
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників