Подтвердить что ты не робот

Сохраните список уникальных строк в массиве ArrayList

Я читаю данные из текстового файла, поэтому может быть:

John
Mary
John
Leeds

Теперь мне нужно получить 3 уникальных элемента в ArrayList, потому что в файле есть только 3 уникальных значения (как указано выше).

Я могу использовать HashTable и добавлять к нему информацию, а затем просто скопировать его данные в Список. Существуют ли другие решения?

4b9b3361

Ответ 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, а затем создание списка из этого набора было бы более эффективным.

Ответ 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, чтобы решить, что ваш товар равен другому.