Более эффективный способ удаления элементов из списка массивов

Я разработал список массивов что-то вроде этого

ArrayList<String> list = new ArrayList<String>();
list.add("1");
list.add("8");
list.add("8");
list.add("3");
list.add("4");

Теперь мой вопрос: если я хочу удалить "8" из списка, какой путь лучше?

Первый способ:

for(int i = 0; i < list.size(); i++) {
    if(list.get(i).equals("8")) {
        list.remove(i);
        i--;
    }
}

Второй способ:

Iterator<String> iterator = list.iterator();
    while(iterator.hasNext())
        if(iterator.next().equals("8"))
            iterator.remove();

Теперь, пожалуйста, посоветуйте, какой из них является более эффективным и быстрым с точки зрения производительности, а также есть ли другой способ, похожий на встроенную функцию, с помощью которого мы можем удалить дубликаты без многократного повторения.

3 ответа

Решение

По производительности они должны быть похожими. Вы проверяли? Если вы хотите использовать встроенные методы, вы можете сделать это с аналогичной производительностью (подтверждается тестированием):

list.removeAll(Arrays.asList("8"));

Наконец, если вы хотите список без дубликатов, используйте набор, как уже упоминали другие.

Если вам нужен набор чисел, используйте HashSet и не List, Если вам нужно сохранить порядок, в котором вы вводите цифры, используйте LinkedHashSet, Что касается удаления, всегда предпочитайте версию с iteratorдаже если в вашем конкретном случае производительность может быть сопоставимой. Идиома с iterator более широко применимо, чем индексирование, например, если вы использовали LinkedListиндексация может привести к катастрофическим результатам.

Если вам нужно хранить дубликаты, я предлагаю вам использовать Map<Integer,Integer> где 1-е целое число - это ключ, а 2-е - количество ключевых случаев. Поэтому, когда вы добавляете ключ, который уже существует, вы просто увеличиваете соответствующий счетчик. (В операции удаления вы делаете наоборот). Когда вам нужны все различные значения, вы просто используете Map.keySet().

Другие вопросы по тегам