Java: спіс, які змяшчае унікальныя элементы ў парадку

Ці ёсць тып спісу ў Java, які захоўвае аб'екты ў парадку ўзрастання і ня дадае, калі гэты аб'ект папярэдне дададзены. Я ведаю, што Java карта можа зрабіць гэта, але мне цікава, калі ёсць тып спісу, які робіць тое, што я хачу. У адваротным выпадку я павінен перавызначыць ўтрымлівае, equalsTo і дадаць метады, праўда?

19
Y U NO выкарыстоўваць мноства?
дададзена аўтар r15habh, крыніца
Затым вывесці ArrayList і перавызначыць дадаць methods.Test існаванне аб'екта, выкарыстоўваючы ўтрымлівае метад перад даданнем у яго аб'ект. Ордэр доступ па індэксе (як спіс) правільна?
дададзена аўтар Prince John Wesley, крыніца
Не, вы не павінны перавызначаць ўтрымлівае, бо ўтрымоўвае ў залежнасці ад роўнасці() тыпу кантэнту. Тое, што вы павінны перавызначыць метад роўна вашага тыпу вы хочаце захаваць у калекцыі. (І калі вы хэш-код з дапамогай хэшавання калекцыі). Лепшы выбар TreeSet, ва ўсякім выпадку, як ужо згадвалася. (Або LinkedHashSet, калі вам трэба, каб захаваць парадак instertion, а не нейкага натуральнага парадку)
дададзена аўтар zeller, крыніца
@Prince Джон Уэслі: пераазначэнне 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 Для не цалкам ігнаруючы патрабаванні Аскер і кажучы, што ён мае патрэбу (адвольнае) Set.
дададзена аўтар G_H, крыніца

Залежыць ад таго, у якім парадку вы маеце на ўвазе.

14
дададзена

TreeSet будзе рабіць трук. прыклад:

SortedSet myOrderedUniqueList = new TreeSet()

4
дададзена

Я думаю, што вы пасля SortedSet (гэта інтэрфейс, які пашырае набор). Набор падобны на спіс, але ён ўтрымлівае толькі адзін з кожнага значэння.

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 з'яўляецца подинтерфейсом Набор, які гарантуе, што элементы ў наборы сартуюцца.

SortedSet orderedSet = new TreeSet();

Выкарыстоўвайце іх, калі вы павінны крамы без дублюючых элементаў у парадку ўзрастання значэнняў элементаў

0
дададзена

Выкарыстоўвайце java.util.LinkedHashSet з пераазначэнне хэш-код() і роўна (OBJ) аб'екта з выкарыстаннем унікальнага ўласцівасці (ов)

0
дададзена