Сохраните список уникальных строк в массиве ArrayList
Я читаю данные из текстового файла, поэтому может быть:
John
Mary
John
Leeds
Теперь мне нужно получить 3 уникальных элемента в ArrayList, потому что в файле есть только 3 уникальных значения (как указано выше).
Я могу использовать HashTable и добавлять к нему информацию, а затем просто скопировать его данные в Список.
Существуют ли другие решения?
Ответы
Ответ 1
Зачем вам хранить его в List
? Действительно ли вы требуете, чтобы данные заказывались или поддерживали индексированные запросы?
Я бы предложил сохранить данные в Set
. Если заказ неважен, вы должны использовать HashSet
. Однако, если вы хотите сохранить заказ, вы можете использовать LinkedHashSet
.
Ответ 2
Если у вас есть List
содержащий дубликаты, и вы хотите List
без, вы можете сделать:
List<String> newList = new ArrayList<String>(new HashSet<String>(oldList));
То есть, заверните старый список в набор, чтобы удалить дубликаты и обернуть их в список снова.
Ответ 3
Перед добавлением вы можете проверить list.contains().
if(!list.contains(value)) {
list.add(value);
}
Я догадался, что это будет очевидно! Однако добавление элементов в HashSet, а затем создание списка из этого набора было бы более эффективным.
Ответ 4
Используйте set
вместо списка. Взгляните здесь: Учебники по сборникам Java и, в частности, о наборах здесь: Учебник Java Sets
В двух словах, в наборах есть что-то. Perfect:)
Ответ 5
Вот как я это решил:
import groovy.io.*;
def arr = ["5", "5", "7", "6", "7", "8", "0"]
List<String> uniqueList = new ArrayList<String>(new HashSet<String>( arr.asList() ));
System.out.println( uniqueList )
Ответ 6
class HashSetList<T extends Object>
extends ArrayList<T> {
private HashSet<Integer> _this = new HashSet<>();
@Override
public boolean add(T obj) {
if (_this.add(obj.hashCode())) {
super.add(obj);
return true;
}
return false;
}
}
Теперь я использую такую структуру для небольших программ, я имею в виду, что у вас мало накладных расходов, чтобы иметь геттеры и сеттеры, но уникальность. Кроме того, вы можете переопределить hashCode
, чтобы решить, что ваш товар равен другому.