List数组去除特定元素的方法

来源:互联网 发布:marry u软件 编辑:程序博客网 时间:2024/05/21 04:20

关于去除List数组中某个元素的方法有很多,其中以下这种方法对于新手来说很容易犯错:

public  void remove() {    ArrayList<String> list = new ArrayList<String>();   list.add("one");   list.add("two");   list.add("two");   list.add("two");   list.add("three");   int len = list.size();System.out.println("移除元素前:" + list);   for(int i=0; i<list.size(); i++){if(list.get(i).equals("two")){list.remove(i);}}System.out.println("移除元素后:" + list);    } 


通过以上的方法,可以看到结果并不是我们所想要的。那是因为每次移除特定元素后,数组的大小会实时变化,而索引 i 却是不断的递增的,导致不匹配的结果。

下面介绍两种简单的实现方法:

1、通过迭代器iterator:

public  void remove() {    ArrayList<String> list = new ArrayList<String>();   list.add("one");   list.add("two");   list.add("two");   list.add("two");   list.add("three");   int len = list.size();System.out.println("移除元素前:" + list);  Iterator<String> iter = list.iterator();   while(iter.hasNext()){       String s = iter.next();       if(s.equals("two")){           iter.remove();       }   }   System.out.println("移除元素后:" + list);    }
2、通过设置标志位,借助一个用来保存标志位的数组:

public  void remove() {    ArrayList<String> list = new ArrayList<String>();   list.add("one");   list.add("two");   list.add("two");   list.add("two");   list.add("three");   int len = list.size();int [] flag = new int[len];ArrayList<String> reserveList = new ArrayList<String>();   System.out.println("移除元素前:" + list);  for(int i=0; i<list.size(); i++){flag[i] = 1; //默认是1,用于保留的索引位if(list.get(i).equals("two")){flag[i] = 0; //设置标志,将要删除的索引位}}for(int i=0; i<len; i++){if(flag[i] == 1){reserveList.add(list.get(i));}}System.out.println("移除元素后:" + reserveList);    }



原创粉丝点击