在一个循环中删除一个列表中的元素
2015-06-26 11:06
267 查看
直接遍历删除的时候一般会写
ArrayList<String> list = new ArrayList<String>(Arrays.asList("a","b","c","d"));
for(int i=0;i<list.size();i++){
list.remove(i);
}
System.out.println(list);
输出:[b, d]
这里面本意可能是全部删除,这里还剩下俩个
当一个元素被删除时,列表的大小缩小并且下标变化,所以当你想要在一个循环中用下标删除多个元素的时候,它并不会正常的生效。
正确:
ArrayList<String> list = new ArrayList<String>(Arrays.asList("a","b","c","d"));
for(int i=0;i<list.size();i++){
if(list.remove(i)!=null){
i--;
}
}
System.out.println(list);
输出:[]
或者是迭代后删除:
ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b",
"c", "d"));
Iterator<String> iter = list.iterator();
while (iter.hasNext()) {
String s = iter.next();
if (s.equals("a"))
iter.remove();
}
System.out.println(list);
ArrayList<String> list = new ArrayList<String>(Arrays.asList("a","b","c","d"));
for(int i=0;i<list.size();i++){
list.remove(i);
}
System.out.println(list);
输出:[b, d]
这里面本意可能是全部删除,这里还剩下俩个
当一个元素被删除时,列表的大小缩小并且下标变化,所以当你想要在一个循环中用下标删除多个元素的时候,它并不会正常的生效。
正确:
ArrayList<String> list = new ArrayList<String>(Arrays.asList("a","b","c","d"));
for(int i=0;i<list.size();i++){
if(list.remove(i)!=null){
i--;
}
}
System.out.println(list);
输出:[]
或者是迭代后删除:
ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b",
"c", "d"));
Iterator<String> iter = list.iterator();
while (iter.hasNext()) {
String s = iter.next();
if (s.equals("a"))
iter.remove();
}
System.out.println(list);
相关文章推荐
- 文件遍历排序函数
- Lua 学习笔记之C API 遍历 Table实现代码
- C#中遍历Hashtable的4种方法
- VBS ArrayList Class vbs中的数组类
- Erlang中遍历取出某个位置的最大值代码
- C++实现图的邻接矩阵存储和广度、深度优先遍历实例分析
- C++实现图的邻接表存储和广度优先遍历实例分析
- 浅析iterator与指针的区别
- php遍历目录方法小结
- 一个目录遍历函数
- php遍历删除整个目录及文件的方法
- PHP遍历文件夹与文件类及处理类用法实例
- PHP遍历XML文档所有节点的方法
- php中使用key,value,current,next和prev函数遍历数组的方法
- C#使用前序遍历、中序遍历和后序遍历打印二叉树的方法
- C#使用foreach遍历哈希表(hashtable)的方法
- php递归遍历多维数组的方法
- C#使用yield关键字让自定义集合实现foreach遍历的方法
- 浅谈javascript 迭代方法
- C#使用foreach语句简单遍历数组的方法