Java 为什么';“这是什么?”;至于;循环是否从数组列表中删除值?
我希望下面的方法删除输入值并在成功时返回值,但是“for”循环实际上从未删除任何值Java 为什么';“这是什么?”;至于;循环是否从数组列表中删除值?,java,Java,我希望下面的方法删除输入值并在成功时返回值,但是“for”循环实际上从未删除任何值 Integer remove(Integer value) { if (_set_array.size() == 0) { return null; } else if (value == null) { return null; } else
Integer remove(Integer value)
{
if (_set_array.size() == 0)
{
return null;
}
else if (value == null)
{
return null;
}
else
{
for (int i = _set_array.size() - 1; i >= 0; i--)
{
if (value == _set_array.get(i))
{
_set_array.remove(i);
return value;
}
}
return null;
}
}
您正在比较引用。使用
intValue
方法将引用转换为基元值:
value.intValue() == _set_array.get(i).intValue()
解释如下:
或者,正如注释中所建议的,您可以使用方法
equals
来比较这两个引用 对我来说很好。你能查一下这个密码吗
import java.util.ArrayList;
import java.util.Arrays;
class Main {
public static void main(String[] args) {
ArrayList _set_array = new ArrayList(Arrays.asList(10000, 20000, 30000, 40000, 50000));
System.out.println(remove(30000, _set_array));
System.out.println(_set_array);
}
static Integer remove(Integer value, ArrayList _set_array) {
if (_set_array.size() == 0) {
return null;
} else if (value == null) {
return null;
} else {
for (int i = _set_array.size() - 1; i >= 0; i--) {
if (value == (int) _set_array.get(i)) { // cast Integer to int primitive type
_set_array.remove(i);
return value;
}
}
return null;
}
}
}
使用此选项进行比较:
value.intValue() == _set_array.get(i).intValue()
这会比较由单个整数表示的int原语。相关代码不会抛出错误吗?在for循环中迭代集合时,不应该修改集合,对吗?循环从上到下进行,因此在移除元素时不会导致任何索引不对齐。我肯定是在比较引用。在将它们转换为原语之后,一切都完美地运行着。我肯定要复习一下掩蔽术。非常感谢。因为整数是低值且在常量池中。较大的值wont==我将1,2,3,4,5更改为10002000300040005000,并删除返回值null。建议值。等于(_set_array.get(i))@slipperyseal同意。因为这里他比较的是对象类型而不是原语类型,所以它不起作用。因此,他可以将值从整数转换为int基元类型。我认为这会更好,因为他比较的是int值而不是对象。您的想法是什么?您还可以将方法param更改为int,并且这些选项中的每一个都会导致自动装箱将int从对象中取消装箱。就个人而言,我认为value.equals(_set_array.get(i))的工作原理不那么模糊,因为它在整数类型上使用常规的equals方法,为什么不使用
equals
try:value.equals(_set_array.get(i))