Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.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 Property从ArrayList中删除整数的一种方法_Java_Collections_Autoboxing - Fatal编程技术网

Java Property从ArrayList中删除整数的一种方法

Java Property从ArrayList中删除整数的一种方法,java,collections,autoboxing,Java,Collections,Autoboxing,我有一个整数数组列表,想从中删除一个整数值。澄清一下:假设我有一个函数,它接受整数的ArrayList,以及指定的整数值。我需要返回从列表中删除(值+1)的列表 布尔deleteFromList(数组列表,整数值) 现在,如果我这样做: return list.remove(value+1) 编译器会抱怨,因为它将尝试调用使用int参数的delete方法,并从指定位置而不是实际对象删除对象。 那么,什么是正确的处理方法呢?这样做是否更好: list.remove((Integer)(value

我有一个整数数组列表,想从中删除一个整数值。澄清一下:假设我有一个函数,它接受整数的
ArrayList
,以及指定的整数值。我需要返回从列表中删除(值+1)的列表

布尔deleteFromList(数组列表,整数值)

现在,如果我这样做:

return list.remove(value+1)
编译器会抱怨,因为它将尝试调用使用
int
参数的delete方法,并从指定位置而不是实际对象删除对象。 那么,什么是正确的处理方法呢?这样做是否更好:

list.remove((Integer)(value+1))

??在第二种情况下,我是否可以确保删除正确的值

list.remove(Integer.valueOf(value+1));
应该行得通

应该可以正常工作。

列表。删除(值+1)
将在给定索引处删除

您可以使用
list.remove(Integer.valueOf(value+1))
删除
Integer

Integer.建议使用valueOf(v)
而不是
newinteger(v)
,因为它允许对特殊值重用
Integer
实例(请参见javadoc)

编辑: 就装箱/拆箱而言,使用trove4j之类的库可以完全消除问题,trove4j定义了一个动态整数数组来存储原语值,而不是数值类(请参阅)。无装箱,无拆箱,GC使用率更低,性能更好。

列表。删除(值+1)
将在给定索引处删除

您可以使用
list.remove(Integer.valueOf(value+1))
删除
Integer

Integer.建议使用valueOf(v)
而不是
newinteger(v)
,因为它允许对特殊值重用
Integer
实例(请参见javadoc)

编辑:
就装箱/拆箱而言,使用trove4j之类的库可以完全消除问题,trove4j定义了一个动态整数数组来存储原语值,而不是数值类(请参阅)。无装箱、无拆箱、较低的GC使用率和更好的性能。

您正在寻找这一款吗

Collections.sort(list);
int index = list.indexOf(5);
list = list.subList(0, index-1);
System.out.println(list);

你在找这个吗

Collections.sort(list);
int index = list.indexOf(5);
list = list.subList(0, index-1);
System.out.println(list);
您可以使用list.indexOf(值+1),因为该方法只接受对象。然后使用该索引删除该元素

    int i = list.indexOf(value + 1);
    list.remove(i);
如果需要删除值+1的所有实例,请继续,直到i为-1(未找到)

或者,只需对其进行迭代,并在找到它们时将其删除

    for (Iterator<Integer> iterator = list.iterator(); iterator.hasNext(); ) {
        Integer integer = iterator.next();
        if (integer == value + 1) {
            iterator.remove();
        }
    }
for(Iterator Iterator=list.Iterator();Iterator.hasNext();){ 整数=迭代器.next(); 如果(整数==值+1){ iterator.remove(); } } 您可以使用list.indexOf(value+1),因为该方法只接受对象。然后使用该索引删除该元素

    int i = list.indexOf(value + 1);
    list.remove(i);
如果需要删除值+1的所有实例,请继续,直到i为-1(未找到)

或者,只需对其进行迭代,并在找到它们时将其删除

    for (Iterator<Integer> iterator = list.iterator(); iterator.hasNext(); ) {
        Integer integer = iterator.next();
        if (integer == value + 1) {
            iterator.remove();
        }
    }
for(Iterator Iterator=list.Iterator();Iterator.hasNext();){ 整数=迭代器.next(); 如果(整数==值+1){ iterator.remove(); } }
更有效的方法可能是使用库中的
TIntArrayList
,它包装
int[]
数组,而不使用包装类型。因此,它占用的内存减少了3倍,速度也快得多。

更有效的方法可能是使用库中的
TIntArrayList
,它包装
int[]
数组,不使用包装类型。因此,它占用的内存减少了3倍,速度也快得多

在第二种情况下,我是否可以确保删除正确的值

list.remove(Integer.valueOf(value+1));
是的,你可以

remove
方法将使用
equals(Object)
标识要从列表中删除的对象。由于
Integer.equals
通过值(而不是对象标识)进行比较,因此创建
Integer
实例并不重要。。。如果包装的
int
值相同


然而。。。您的第二个版本低于第一个版本:

  • 它很麻烦:3条语句而不是1条

  • 您使用的是
    newinteger(…)
    而不是
    Integer.valueOf(…)
    ,后者总是要创建一个新实例。相比之下,自动装箱(或显式调用
    Integer.valueOf(…)
    使用
    Integer
    类实例缓存,这通常会避免创建新实例

在第二种情况下,我是否可以确保删除正确的值

list.remove(Integer.valueOf(value+1));
是的,你可以

remove
方法将使用
equals(Object)
标识要从列表中删除的对象。由于
Integer.equals
通过值(而不是对象标识)进行比较,因此创建
Integer
实例并不重要。。。如果包装的
int
值相同


然而。。。您的第二个版本低于第一个版本:

  • 它很麻烦:3条语句而不是1条

  • 您使用的是
    newinteger(…)
    而不是
    Integer.valueOf(…)
    ,后者总是要创建一个新实例。相比之下,自动装箱(或显式调用
    Integer.valueOf(…)
    使用
    Integer
    类实例缓存,这通常会避免创建新实例


对不起,正确的方法名称是remove,我是从头开始写的。我会更新我的question@Maroun
list.remove(v+1)
不起作用-这就是重点。我认为这是一个基于意见的问题,所以我投票决定结束。您已经发现
remove((Integer)(value+1))
remove(newinteger(value+1))
都可以工作。至于哪一个更好——随便挑一个让你更快乐的。它们在自动装箱/拳击方面是一样的吗?一个比另一个要花更长的时间吗?W