删除三个 ArrayList有一个Integer 3和其他几个数字。删除整数3的最佳方法是什么?
情景1 您知道列表中整数3的位置。
情景2 您不知道列表中整数3的位置。
问题陈述
修改给定的脚手架代码,以便处理场景1.如果正确删除了所需的整数,则列表中所有元素的总和将与测试用例期望的内容相匹配。
import java.io.*;
import java.util.*;
public class JavaTutorial{
public static void main(String[] args){
List<Integer> numbers = new ArrayList<Integer>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(3);
numbers.add(4);
numbers.add(3);
System.out.println("ArrayList contains : " + numbers);
numbers.remove(3);
System.out.println("ArrayList contains : " + numbers);
int sum = 0;
for (int i: numbers)
sum += i;
System.out.println (sum);
}
}
这是我的问题和要编辑的示例代码。
任何人都可以帮我解决问题吗?
答案 0 :(得分:1)
检查ArrayList的javadocs,有一个remove方法,它将索引作为参数。 https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#remove(int)
对于第二种情况,在列表中迭代以找到“3”并将其删除。 这是一个很好的教程:http://www.mkyong.com/java/how-do-loop-iterate-a-list-in-java/
答案 1 :(得分:1)
要给您提示,您需要在两个System.out.println
之间进行修改。
System.out.println("ArrayList contains : " + numbers);
numbers.remove(3);
System.out.println("ArrayList contains : " + numbers);
代码很简单。
对于方案1,您已经在问题中做过了。
对于方案2,会有一个Java API,它为您提供所需号码的位置。
Java API中的列表:https://docs.oracle.com/javase/7/docs/api/java/util/List.html
获取索引号
您可以使用&#34; indexof&#34;。
答案 2 :(得分:1)
对于场景1,如果您知道要删除的元素的索引,则可以使用arrayListName.remove(index)
对于场景2,如果要删除元素,可以使用arrayList.indexOf(element)找到该元素的第一个匹配项。但这只会消除第一次出现。如果要删除元素的所有匹配项,可以迭代它直到它返回-1。
答案 3 :(得分:1)
对于方案1,请使用remove(int index)
。由于第三个项目的索引为2
(从零开始),您可以将其删除:
// Scenario 1:
numbers.remove(2);
对于方案2,请使用remove(Object o)
。只需将其转换为Integer
,它将搜索等于3的对象:
// Scenario 2:
numbers.remove((Integer)3);
测试它:
List<Integer> numbers = new ArrayList<Integer>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
// Scenario 1:
numbers.remove(2);
// Scenario 2:
numbers.remove((Integer)3);
System.out.println(numbers);
注意:在这两种情况下,都有无需迭代列表。
更新:在方案2中,如果列表中可能包含多个数字3,那么要删除所有这些数据(Java 8),我会这样做:
numbers.removeIf(((Integer)3)::equals);
答案 4 :(得分:0)
import java.io.*;
import java.util.*;
public class JavaTutorial{
public static void main(String[] args){
List<Integer> numbers = new ArrayList<Integer>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
System.out.println("ArrayList contains : " + numbers);
//Case 1 :
for(int k=0; k<numbers.size(); k++){
if(numbers.get(k)==3){
numbers.remove(k);
break;
}
}
//Case 2 (avoid loops for optimization):
numbers.remove(numbers.indexOf(3));
System.out.println("ArrayList contains : " + numbers);
int sum = 0;
for (int i: numbers)
sum += i;
System.out.println (sum);
}
}
注意:两种方法都是动态的(即你不知道具体数字的索引)