黑马程序员技术交流社区
标题:
ArrayList类的remove方法的问题。
[打印本页]
作者:
yi651312197
时间:
2016-2-17 19:56
标题:
ArrayList类的remove方法的问题。
import java.util.ArrayList;
public class ArrayListDemo {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("aaa");
list.add("aaa");
list.add("bbb");
list.add("ccc");
System.out.println(list.remove("aaa"));
for(String l : list) {
System.out.println(l);
}
}
}
复制代码
remove方法为什么只删除了一个“aaa”?
作者:
j6819236
时间:
2016-2-17 21:02
本帖最后由 j6819236 于 2016-2-17 21:08 编辑
public boolean remove(Object o) {
if (o == null) {
for (int index = 0; index < size; index++)
if (elementData[index] == null) {
fastRemove(index);
return true;
}
} else {//"aaa"进入,从0位置读取至size-1元素 遇到相同元素就删除,返回true
for (int index = 0; index < size; index++)
if (o.equals(elementData[index])) {
fastRemove(index);
return true;
}
}
return false;
}
从代码看出来方法只要遇到相同元素就会return 结束了,所以只会删除1次
作者:
tujiu888
时间:
2016-2-17 21:18
本帖最后由 tujiu888 于 2016-2-17 21:34 编辑
import java.util.ArrayList;
public class Test01 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("aaa");
list.add("aaa");
list.add("bbb");
list.add("aaa");
list.add("bbb");
list.add("ccc");
// System.out.println(list.remove("aaa"));
/*//方法1:
for (int i = 0;i < list.size() - 1;i++) {
if ("aaa".equals(list.get(i))) {
list.remove(i);
i--;
}
}*/
//方法2
for (int i = list.size() - 1;i >= 0;i--) {
if ("aaa".equals(list.get(i))) {
list.remove(i);
}
}
System.out.println(list);
}
}
作者:
玉质彼端
时间:
2016-2-17 21:59
2楼从源代码说明了java.util.ArrayList的remove(Object)方法只删除第一个成功匹配到的元素。
如果你想将所有匹配到的元素都删除,建议使用Iterator形式进行删除:
Iterator<String> lt = list.iterator();
while(lt.hasNext()){
if ("aaa".equals(lt.next())) {
lt.remove();
}
}
当然,还有一种比较神奇的删除方式,一步到位,但是效率低一些:
list.removeAll(Arrays.asList("aaa"));
作者:
yi651312197
时间:
2016-2-18 10:56
玉质彼端 发表于 2016-2-17 21:59
2楼从源代码说明了java.util.ArrayList的remove(Object)方法只删除第一个成功匹配到的元素。
如果你想将所 ...
有道理
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2