В разработке проекта нам часто потребуется динамически удалить некоторые элементы в ArrayList.
Неправильный способ:
<pre name = "code"> for (int i = 0, len = list.size (); i <len; ++ i) {if (list.get (i) == xxx) {list.remove (i); }}Приведенный выше метод добавит следующее исключение:
Исключение в потоке "Main" java.lang.indexoutofboundsexception: индекс: 3, размер: 3 на java.util.arraylist.rangecheck (неизвестный источник) на java.util.arraylist.get (неизвестный источник) на listdemo.main (listdemo.java:20)
Поскольку вы удалили элемент, но не изменили инспект итерации, так что, когда итерация достигает последнего, будет брошено исключение.
Приведенная выше программа может быть улучшена следующим образом:
for (int i = 0, len = list.size (); i <len; ++ i) {if (list.get (i) == xxx) {list.remove (i); -len; // уменьшить один}}Приведенный выше код верен.
Давайте представим другое решение:
Интерфейс списка реализует интерфейс итератора внутри, предоставляя разработчику итератор (), чтобы получить объект итератора текущего объекта списка.
Iterator <string> slisticerator = list.iterator (); while (slistiterator.hasnext ()) {string e = slisterator.next (); if (e.equals ("3")) {slisticerator.remove (); }}Выше также верно, и рекомендуется второе решение.
Принципы реализации двух решений почти одинаковы, а второй - JDK.
При просмотре исходного кода ArrayList вы обнаружите, что многие методы реализованы внутри, основываясь на интерфейсе итератора, поэтому рекомендуется второе решение.
Выше приведено все содержание метода для удаления конкретных элементов в цикле Arraylist Java Arraylist, принесенного вам. Я надеюсь, что все поддерживают wulin.com ~