安卓谷歌电子市场学习笔记系列——怎么移除集合中的元素(迭代器的使用)

时间:2021-06-07 22:36:41

初学安卓开发,菜鸟阶段,看黑马视频里的谷歌电子市场里的BaseActivity里通过一个LinkedList去管理了所有的activity。在集合中移除activity时这样写到



public void killAll() {
  List<BaseActivity> copy;
  synchronized (mActivities) {
   copy = new LinkedList<BaseActivity>(mActivities);
  }
  for (BaseActivity activity : copy) {
   activity.finish();
  }
  android.os.Process.killProcess(android.os.Process.myPid());
 }

老师说集合遍历的过程中不能移除元素,然后就复制了一份BaseActivity去遍历移除它,个人还是不太明白原理,就看了很多别人的博客,于是就写了我的第一篇博客,觉得学习要养成良好习惯,记录下这些辛苦获取的经验,也方便以后自己复习和供别人参考。

java中集合在遍历的过程中移除元素会报异常,具体如下:

List<Integer> list = newArrayList<Integer>();

5         list.add(1);
6         list.add(2);
7         list.add(2);
8         list.add(3);
9         list.add(4);
10
11         for(Integer value : list) {
12             if(2== value) {
13                 list.remove(value);
14             }
15             System.out.println(value);
16

        }

想要移除集合中值为2的元素 会报错,此时会有一个笨的方法解决它,就是再写个list在遍历的过程中判断如果值为2就加入该list中,然后在外面去遍历这个新的list去移除所有list.removeAll();这个思想也正是上面老师写的那个代码,但是有更好的方法就是 采用集合中的迭代器方法去做移除操作,会变得简单方便不报错,具体:

Iterator<Integer> it = list.iterator();

12         while(it.hasNext()) {
13             Integer value = it.next();
14             if(2== value) {
15                 it.remove();
16             }
17             System.out.println(value);
18         }

感觉集合元素的移除用集合本身的迭代器去做更好