黑马程序员技术交流社区

标题: 如何动态删除arraylist中的元素 [打印本页]

作者: 我能驾驭住    时间: 2012-5-26 16:41
标题: 如何动态删除arraylist中的元素
由于arraylist 的元素删除元素后长度变小了,元素的索引也会跟着改变,但是迭代的下标没有跟着相应的改变。请问大侠们怎么处理在ArrayList中删除所有不等于指定值的元素
作者: 黑马张健    时间: 2012-5-26 17:02
import java.util.*;

public class Test2 {
        public static void main(String[] args) {
                ArrayList list = new ArrayList();
                list.add("abc");
                list.add("java");
                list.add("java");
                list.add("bcd");
                list.add("java");
                list.add("java");

                sop(list);
                removeList2(list);
                sop(list);


        }

        public static void sop(Object obj) {
                System.out.println(obj);
        }
        //方法一:
        public static void removeList1(List<String> list) {
                for (int i = 0; i < list.size(); i++) {
                        if ("java".equals(list.get(i))) {
                                list.remove(i);
                                --i;// 删除了元素,迭代的下标也跟着改变
                        }
                }
        }
//        方法二:
        public static void removeList2(List<String> list) {
                Iterator<String> iterator = list.iterator();
                while (iterator.hasNext()) {
                        String str = iterator.next();
                        if ("java".equals(str)) {
                                iterator.remove();
                        }

                }
        }
}
打印结果:
abc  bcd
作者: 张晨    时间: 2012-5-26 17:06
在iterator中删除比较靠谱
作者: 我能驾驭住    时间: 2012-5-26 17:39
黑马张健 发表于 2012-5-26 17:02
import java.util.*;

public class Test2 {

神州行,我看行。就第二个方法了:D
作者: 高云飞    时间: 2012-5-27 08:28
本帖最后由 高云飞 于 2012-5-27 08:31 编辑

建议使用ListIterator,这对list接口的实现类,例如ArrayList或者LinkedList都很安全,不会出现你说的问题。
  1. ArrayList<String> list = new ArrayList<String>();
  2.                 list.add("abc");
  3.                 list.add("java");
  4.                 list.add("java");
  5.                 list.add("bcd");
  6.                 list.add("java");
  7.                 list.add("java");

  8. ListIterator<String> lit = list.listIterator();
  9. while (lit.hasNext()){
  10. if (你的删除标准) {
  11. lit.remove();

  12. }
复制代码





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