zig*_*don 13 java debugging arraylist
我有一个ArrayList,其中包含我想删除的一些项目.我有要删除的项目的ID存储在另一个列表中.认为以下代码应该是平常工作的,但由于某种原因,remove()调用返回一个false值:
ArrayList<Integer> toRemove = new ArrayList<Integer>();
ArrayList<JCheckBox> al = new ArrayList<JCheckBox>();
/* Code that adds a bunch of items to al, and a few integers to toRemove */
System.out.println("Size before removing: " + al.size());
for (int i = toRemove.size() - 1; i >= 0; i--) {
System.out.println("Removing id: " + toRemove.get(i) + ": ");
System.out.println(al.get(toRemove.get(i)));
System.out.println(al.remove(toRemove.get(i)));
}
System.out.println("Size after removing: " + al.size());
Run Code Online (Sandbox Code Playgroud)
如果get()调用也返回了false值,我会得到它,但它实际上会返回有问题的对象.我在这里错过了什么?
上面代码的输出:
Size before removing: 3
Removing id: 2:
javax.swing.JCheckBox[...]
false
Size after removing: 3
Run Code Online (Sandbox Code Playgroud)
ILM*_*tan 31
我的猜测是您有这样一个事实的问题remove()超载既int和Object,而get()只需要一个int.试试remove(toRemove.get(i).intValue()).
remove(Object)from AbstractCollection将搜索列表并删除给定的对象,因为你发送它Integer并且列表只有JCheckBoxs ,所以它不会出现.您正在尝试调用remove(int),但因为您正在调用它Integer,所以会调用Object重载.通过将转换Integer为a int,可以避免此问题
此外,您是否可以始终确保toRemove中的Id始终等于索引?如果toRemove不是最大到最小的顺序,它将不会.
| 归档时间: |
|
| 查看次数: |
10981 次 |
| 最近记录: |