我是一个相对较新的Java程序员,我从diffList中删除了多个元素。理想情况下,我想做这样的事情:
ArrayList ar1 = new ArrayList();
ar1.add(...)
ar1.add(...)
ar1.add(...)
ar1.add(...)
for (int i = 0; i < 2; i++){
ar1.remove(i);
}
我认为迭代器可能会有所帮助,但我找不到一个与我正在尝试的内容相近的示例。任何帮助,将不胜感激。感谢。
答案 0 :(得分:21)
这是你想要做的:
ar1.subList(0, 2).clear();
这将创建列表的前2个元素的子列表视图,然后清除该子列表,将其从原始列表中删除。 subList
方法主要用于此类事务......在列表的特定范围内执行操作。
答案 1 :(得分:5)
你当然可以这样做
ArrayList ar1 = new ArrayList();
ar1.add("a");
ar1.add("b");
ar1.add("c");
ar1.add("d");
for (int i = 0; i < 2; i++) {
ar1.remove(i);
}
System.out.println(ar1);
请注意,在删除第一个元素后,其他元素会移位。因此,请致电
ar1.remove(0);
ar1.remove(1);
将有效地从列表中删除第一个和第三个元素。但是,这将删除前两个元素:
ar1.remove(0);
ar1.remove(0);
答案 2 :(得分:3)
对于列表中的索引删除,您需要向后计数:
for (int i = 1; i >= 0; i--)
否则,您的第一次删除会将项目中的项目“移到”上方,并且您不会删除您认为要删除的项目。
答案 3 :(得分:2)
如果要删除单独的对象列表,可以使用Collection.removeAll(toRemove)。
http://download.oracle.com/javase/6/docs/api/java/util/Collection.html
如果你的集合是基于索引的,就像ArrayList那样,你可以调用
remove(index)
删除索引处的元素。你可以在一个循环中做到这一点,但要注意删除所有索引的移动作为另一个答案指出。
如果您只想删除列表中的前两个元素,那么
list.remove(0);
list.remove(0);
应该这样做。
答案 4 :(得分:2)
如果您知道要删除的项目的索引,可以按相反的顺序删除它们,而不必担心转移索引:
ArrayList ar1 = new ArrayList();
ar1.add("a");
ar1.add("b");
ar1.add("c");
ar1.add("d");
int[] indexesToRemove = {0,2,3};
Arrays.sort(indexesToRemove);
for (int i=indexesToRemove.length-1; i>=0; i--) {
ar1.remove(indexesToRemove[i]);
}
答案 5 :(得分:1)
你可以试试这个:
List<Whatever> l = new ArrayList<Whatever>();
l.add(someStuff);
Iterator<Whatever> it = l.iterator();
int i = 0;
while (i < 2 && it.hasNext()) {
it.next();
it.remove();
i++;
}
或者,更一般地说:
List<Whatever> l = new ArrayList<Whatever>();
l.add(someStuff);
Iterator<Whatever> it = l.iterator();
while (it.hasNext()) {
Whatever next = it.next();
if (shouldRemove(next)) {
it.remove();
}
}
编辑:我想这取决于您是否尝试删除特定索引或特定对象。它还取决于您需要多少逻辑来决定是否应删除某些内容。如果您知道索引,则按相反顺序删除它们。如果要删除一组对象,请使用removeAll。如果要迭代列表并删除与谓词匹配的对象,请使用上面的代码。