2016-02-26 184 views
0

删除三个
ArrayList中有一个整数3和其他数字。删除Integer 3的最好方法是什么?从ArrayList中删除 - 从列表中删除一个整数

场景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

如果您正在搜索的第三,你可以使用ArrayList的indexOf方法 – Logan

+0

你能评论一个示例代码吗? –

+2

你对这个问题有什么想法?这听起来像是你没有尝试就在这里放弃了一项任务。 –

回答

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); 
+0

谢谢。 它工作 –

+0

不客气,史蒂夫。 ;)但是现在你应该接受这个答案是正确的。你知道怎么做吗?您只需点击答案左侧的“✓”符号即可。 – MarcG

+0

如果列表中有更多的'3',则场景1不起作用! –

1

检查ArrayList的javadoc,有一个remove索引作为参数的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

那么,你没有直接的答案引导。 – vels4j

+0

作为一个新用户,您应该阅读[this](http://meta.stackexchange.com/a/8259),了解为什么只有链接的答案尽管可能有帮助,但并不理想。除了链接之外,您还可以提供完整的答案吗? – IanS

+0

@IanS刚刚通过帖子,但我觉得这个问题,我仍然觉得链接更好,因为这看起来更像是一个任务,用户似乎是新来的Java,在我的第一个链接,我暴露了用户javadocs任何认真的java程序员应该先看看。 如果我们给出像Joydeep这样的答案,我不明白为什么用户甚至会打扰访问链接。 – Stephen84s

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

}

注:这两个方法是动态的(即你不知道具体数量的指​​数)

+0

这对于循环来说确实没有必要。 'number.remove(3)'如果删除了3,则返回true。也可以使用'indexOf(3)' –

+0

你应该解释为什么这会起作用。 [这不是一个代码写作服务](http://meta.stackoverflow.com/questions/266270/specific-warnings-to-newbies-about-homework-code-writing-please-debug-and-sscce)。 – IanS

+0

@ cricket_007 numbers.remove(3)不会删除内容3,但会删除第3个索引处的内容。在这种情况下,numbers.remove(3)从集合中删除4个。 我应该使用numbers.remove(numbers.indexOf(3))以获得更好的优化。 – Joydeep

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
您可以通过使用 “的indexOf” 得到的索引号。

1

为方案1,如果你知道你要删除,那么你可以使用arrayListName.remove(指数)

对于场景2,如果你想删除的元素的索引该元素可以通过使用arrayList.indexOf(element)找到该元素的第一次出现。但是这仅仅消除了第一次出现。你可以迭代它直到它返回-1,如果你想删除所有出现的元素。