2016-02-26 183 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,如果你想刪除所有出現的元素。