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
list.remove(v+1)
不起作用-这就是重点。我认为这是一个基于意见的问题,所以我投票决定结束。您已经发现remove((Integer)(value+1))
和remove(newinteger(value+1))
都可以工作。至于哪一个更好——随便挑一个让你更快乐的。它们在自动装箱/拳击方面是一样的吗?一个比另一个要花更长的时间吗?W