Intereting Posts
Java-streamи и синхронизированные блоки Hibernate AliasToBean с коллекцией В любом случае я могу выделить строку в JTable? Манипулирование цветным изображением в матричной форме в java Есть ли разница в производительности для вызова .length в массиве или сохранения переменной размера? Как использовать @UniqueConstraint с единственным наследованием таблицы (JPA)? Как получить JScrollPanes в JScrollPane для изменения размера родительского элемента Хранилище для ключей на основе диска на основе Java Поиск пути к банке из classа внутри него? Графическое изображение Java Медленная компиляция с jOOQ 3.6+, простым SQL и компилятором javac Как использовать POI SXSSF для чтения большой электронной таблицы лучший способ подкачки больших результатов -Java Как resize спрайта в Libgdx? Java-метод, чтобы найти прямоугольник, который является пересечением двух прямоугольников, используя только левую нижнюю точку, ширину и высоту?

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

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

ArrayList list = new ArrayList(); 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 iterator = list.iterator(); while(iterator.hasNext()) if(iterator.next().equals("8")) iterator.remove(); в Iterator iterator = list.iterator(); while(iterator.hasNext()) if(iterator.next().equals("8")) iterator.remove(); 

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

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

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

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

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

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