Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayList.remove()问题_Java - Fatal编程技术网

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);