从ArrayList中删除 - 从列表

时间:2016-02-26 05:34:05

标签: java arraylist

删除三个 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);
    }
}

这是我的问题和要编辑的示例代码。
任何人都可以帮我解决问题吗?

5 个答案:

答案 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);
}

}

注意:两种方法都是动态的(即你不知道具体数字的索引)