Уникални стойности на Java - Как да премахнете дублиращи се елементи от ArrayList CODE Q - A Решен

Ако не искате дубликати в колекция, тогава трябва да помислите защо използвате колекция, която позволява дубликати. Най-лесният начин за премахване на дублиращи се елементи е да добавите съдържание към Set (което ще предотврати дублирането) и след това да добавите Set обратно към ArrayList:

Разбира се, това разрушава подреждането на елементите в ArrayList.

Имам ArrayList и искам да премахна дублиращи се редове от него. Как мога да направя това?

Имайте предвид, че договорът hashCode-equals трябва да се спазва, за да могат членовете на списъка да съответстват на hashCode-equals.

Да предположим, че имаме списък от String:

След това можем да премахнем дублиращите се елементи по няколко начина.

Забележка. Ако искаме да запазим реда на вмъкване, трябва да използваме LinkedHashSet вместо HashSet

Използване на гуава

Използване на Java 8

Забележка. Ако искаме да съберем резултата вреализация на конкретен списък, като LinkedList, можем да променим горния пример като:

Можете също да го направите по този начин и да запазите реда:

Има и ImmutableSet на Guava като опция (ето документацията):

Вероятно съм прекалил малко, но ми харесва този изолиран проблем. :)

Този код използва временен набор (за проверка за уникалност), но премахва елементи директно от оригиналния списък. Тъй като премахването на елемент в ArrayList може да причини огромен брой копия на масиви, методът remove(int) се елиминира.

Докато сме там, ето версията на LinkedList (много по-добра!):

Използвайте интерфейса на маркера, за да представите едно решение засписък:

РЕДАКТИРАНЕ: Мисля, че генеричните лекарства не добавят никаква стойност. о добре :)

Тези три реда код могат да премахнат дублиран елемент от ArrayList или която и да е колекция.

Ако искате да запазите поръчката си, по-добре е да използватеLinkedHashSet. Защото, ако искате да предадете този списък към заявката за вмъкване, като я итерирате, редът ще бъде запазен.

Това преобразуване ще бъде много полезно, ако искате да върнете списък, но не и набор.