Android中使用集合那是家常便饭的事情来的,但是有的时候容易麻痹大意,比如在删除集合元素的过程,我就掉进过坑里,在此总结下来,以后引以为戒。

1. 删除一个集合元素

  List lists = new ArrayList<>();        lists.add(1);        lists.add(2);        lists.add(3);        lists.add(4);        lists.add(5);        lists.add(6);        lists.add(7);        lists.add(8);        lists.add(9);         for (int i = 0; i < lists.size(); i++) {            int num = lists.get(i);            if (num == 6) {                lists.remove(i);                break;            }        }        LeoLog.ee("剩下的集合:" + lists.toString());

打出的log:

删除成功。
如果用下面这个方法会有一个需要注意的地方。

  for (int num : lists) {            if (num == 6) {                lists.remove((Object) num);                //注意:不加break,会报ConcurrentModificationException                break;            }        }

2. 删除多个集合元素

这种是有风险的

 List lists = new ArrayList<>();        lists.add(1);        lists.add(2);        lists.add(3);        lists.add(4);        lists.add(5);        lists.add(6);        lists.add(7);        lists.add(8);        lists.add(9);        for (int i = 0; i < lists.size(); i++) {            int num = lists.get(i);            if (num == 4)                lists.remove(i);            if (num == 5)                lists.remove(i);            if (num == 6)                lists.remove(i);        }        LeoLog.ee("剩下的集合:" + lists.toString());

打出的log

发现,我条件要求删除的是4、5、6,但是5没有被移除,发生的原因就是,当4被移除了,然后5的索引就会发生变化。

当然有一种方式可以这样

for (int i = 0; i < lists.size(); i++) {            int num = lists.get(i);            if (num == 4) {                lists.remove(i);                //每删一次就重新遍历                i = 0;            }            if (num == 5)            {                lists.remove(i);                //每删一次就重新遍历                i = 0;            }            if (num == 6)            {                lists.remove(i);                //每删一次就重新遍历                i = 0;            }        }

但是我感觉最好的方式还是使用iterator(迭代器)

 List lists = new ArrayList<>();        lists.add(1);        lists.add(2);        lists.add(3);        lists.add(4);        lists.add(5);        lists.add(6);        lists.add(7);        lists.add(8);        lists.add(9);        Iterator iterator = lists.iterator();        while (iterator.hasNext()) {            int pos = iterator.next();            if (pos == 4) {                iterator.remove();            }            if (pos == 5) {                iterator.remove();            }            if (pos == 6) {                iterator.remove();            }        }        LeoLog.ee("剩下的集合:" + lists.toString());

删除成功

更多相关文章

  1. Android(安卓)流式布局FlowLayout(搜索历史),多布局、删除、添加
  2. Android(安卓)通讯录中用到的关于按名字首字母排序方法
  3. android studio的问题整理(如何删除模块(Module))
  4. android studio的问题整理
  5. android SQLiteDatebase 实践
  6. gson使用在android使用例子
  7. Android动态添加删除recycleview并动态保存recycleview中的的数
  8. Android(安卓)问题集合
  9. Android(安卓)监控应用删除,并提示处理

随机推荐

  1. sqoop export导出 map100% reduce0% 卡住
  2. mysql查询条件not in 和 in的区别及原因
  3. 解决mysql使用not in 包含null值的问题
  4. 解决从集合运算到mysql的not like找不出N
  5. 使用mysql记录从url返回的http GET请求数
  6. hive从mysql导入数据量变多的解决方案
  7. navicat 连接数据库隔段时间后自动断开连
  8. 为什么在MySQL中不建议使用UTF-8
  9. mysql 8.0.22压缩包完整安装与配置教程图
  10. Windows下MySQL定时备份脚本的实现