黑马程序员技术交流社区

标题: 对集合中的元素删除操作和注意点 [打印本页]

作者: baoyumin    时间: 2016-2-21 17:24
标题: 对集合中的元素删除操作和注意点
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ForeTest2 {

        /**
         * 对集合中的元素删除
         */
        public static void main(String[] args) {
                //demo1();
               
                //demo2();
               
                //demo();
        }

        private static void demo() {
                List<String> li = new ArrayList<>();
                li.add("a");
                li.add("a");
                li.add("d");
                li.add("f");
                li.add("a");
                li.add("h");
               
                //因为增强for循环底层是有迭代器实现的,在修改时会报出并发修改异常
                for (String string : li) {
                        if("a".equals(string)) {
                                li.remove("a");
                        }
                }
                System.out.println(li);
        }

        private static void demo2() {
                List<String> li = new ArrayList<>();
                li.add("a");
                li.add("a");
                li.add("d");
                li.add("f");
                li.add("a");
                li.add("h");
                //在用普通for循环修改时,没删掉一个重复的元素,i的值就会改变,对于重复的元素在一块时,
                //后面的重复元素就跳过那个i值了,将会被保留下来,将每次将i-1,就是往上一次,即可避免
                for(int i = 0; i < li.size(); i ++) {
                        if("a".equals(li.get(i))) {
                                li.remove("a");
                                i--;
                        }
                }
                System.out.println(li);
        }

        private static void demo1() {
                List<String> li = new ArrayList<>();
                li.add("a");
                li.add("a");
                li.add("d");
                li.add("f");
                li.add("a");
                li.add("h");
               
                Iterator<String> it = li.iterator();
                while(it.hasNext()) {
                        String str = it.next();
                        if("a".equals(str)) {
                                //在迭代过程中删掉元素,如果用集合的删除方法删除元素,会出现并发修改异常,需要用迭代器的方法
                                //li.remove("a");
                                it.remove();
                        }
                }
                System.out.println(li);
        }

}
作者: tujiu888    时间: 2016-2-21 20:23
总结:删除list当中的元素的三种方法,
第一:可以通过普通for循环正遍历,多做一步 i-- 指针回到索引0的位置 第二:可以倒着遍历for循环,这个时候指针不需要做变
第三条 通过迭代器删除集合当中的元素,需要用list本身的迭代器方法listIterator进行删除 否则会出现并发修改异常(重点掌握)





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2