A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我能驾驭住 中级黑马   /  2012-5-26 16:41  /  4291 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

由于arraylist 的元素删除元素后长度变小了,元素的索引也会跟着改变,但是迭代的下标没有跟着相应的改变。请问大侠们怎么处理在ArrayList中删除所有不等于指定值的元素

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
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

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
在iterator中删除比较靠谱
回复 使用道具 举报
黑马张健 发表于 2012-5-26 17:02
import java.util.*;

public class Test2 {

神州行,我看行。就第二个方法了:D
回复 使用道具 举报
本帖最后由 高云飞 于 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. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马