Java ArrayList.remove()问题
这是我代码的一部分Java ArrayList.remove()问题,java,Java,这是我代码的一部分 Integer keyLocation = reducedFD.indexOf(KeyPlus.get(KEYindex)); someArrayList.remove(keyLocation); 因此,我在这里所做的是分配keyLocation(reducedFD arrayList中字符串的第一次出现)。但是,当我想从someArrayList中删除带有该keyLocation的项时,它将不起作用 如果我手动输入: someArrayList.remove(0); //
Integer keyLocation = reducedFD.indexOf(KeyPlus.get(KEYindex));
someArrayList.remove(keyLocation);
因此,我在这里所做的是分配keyLocation(reducedFD arrayList中字符串的第一次出现)。但是,当我想从someArrayList中删除带有该keyLocation的项时,它将不起作用
如果我手动输入:
someArrayList.remove(0); //Let's say 0 is the actual keyLocation
这确实有效
奇怪的是,以下代码也可以工作:
someArrayList.remove(keyLocation + 1);
有什么提示吗
以下是主循环:
for (int KEYindex = 0; KEYindex < KeyPlus.size(); KEYindex++){
Integer keyLocation = reducedFD.indexOf(KeyPlus.get(KEYindex));
if (reducedFD.contains(KeyPlus.get(KEYindex))){
KeyPlus.add(reducedFD.get(keyLocation+1));
CheckedAttributesPlus.add(KeyPlus.get(KEYindex));
reducedFD.remove(keyLocation);
}
}
for(int-KEYindex=0;KEYindex
问题在于,您正在向remove方法传递一个整数,而不是int。当您传递一个整数时,它假定整数本身就是您要删除的,而不是该索引处的值。比较这些方法
remove(Object o)
remove(int i)
我们也要这样做:
int keyLocation = reducedFD.indexOf(KeyPlus.get(KEYindex));
someArrayList.remove(keyLocation);
List
接口有两个remove()
方法,一个接收对象(并尝试从列表中删除此对象),另一个接收int
(并尝试删除其索引为给定int的对象)
通常,给一个方法一个Integer
参数会导致自动取消装箱,或自动转换为原语int
。在这种情况下,编译器不会尝试自动取消装箱,因为有一个非常好的方法可以接收对象
,以及对象的整数实例
。。。我猜您的列表不是list
,这就是它失败的原因
将int添加到您的整数
会强制自动取消装箱,添加后的结果是int
-非常适合于其他remove()
方法。以下是简短的说明:
remove(Object o) // remove object
remove(int index) // remove the object in that index
如果您编写.remove(5)
编译器将其理解为一个基元类型,以便作为索引,并删除索引(5)。
如果您要删除对象,您应该编写.remove(新整数(5))
,或者您可以执行以下操作:
someArrayList.remove(keyLocation + 0);
您可以调用它,而不是创建int
如果您查看ArrayList
JavaDoc,您会发现这个声明
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
public E remove(int index){
.
.
.
}
你说的“这行不通”是什么意思?计算机重新启动,我想?我说的“它不会工作”,是指它根本不会删除它。它忽略了它。你能把你的代码写得更详细一点吗?多一点代码..那你怎么知道它不会删除它呢?我被困在这上面一个多小时了。。谢谢你,伙计……:)+1、对于刚接触Java的人来说,int
和Integer
是不同的想法有点让人困惑。谢谢。这是我吃的2个小时。thanxOh男孩,我花了2个小时弄清楚为什么我的东西没有被移除……谢谢
someArrayList.remove(integerKeyLocation.intValue());
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
public E remove(int index){
.
.
.
}
someArrayList.remove((int)keyLocation);