2017-12-31 162 views
-1

Dies ist kein Duplikat! Es ist wahr, dass die wörtliche Frage zuvor gefragt wurde, aber weder die Frage hatte die gleiche Absicht (Fokus auf Int und Integer und Deprecation) noch die Antworten beantwortet, was ich suchte.Wie entfernt man ein spezifisches Objekt aus einer ArrayList von Integer in Java?

Ich sah viel durch StackOverflow. Ich habe die gleichen Fragen und Antworten immer und immer wieder gesehen, aber sie sprechen das eigentliche Problem nicht an.

Es gibt Java. Java hat ArrayList. ArrayList hat die Methode remove(). Die JDK9-Dokumentation besagt, dass der Index als Parameter oder das Objekt selbst, das Sie entfernen möchten, verwendet werden kann. Der folgende Code funktioniert jedoch nicht.

import java.util.*; 

public class Tea { 
    public static void main (String[] args) { 

     ArrayList<Integer> myList = new ArrayList<Integer>(); 

     myList.add(69); 

     myList.remove(((int) 69)); 

     System.out.println(myList); 

    } 
} 

Es kompiliert, aber es läuft nicht und so gibt es folgende Fehlermeldung:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 69 out-of-bounds for length 1 
    at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) 
    at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) 
    at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248) 
    at java.base/java.util.Objects.checkIndex(Objects.java:372) 
    at java.base/java.util.ArrayList.remove(ArrayList.java:517) 
    at Tea.main(Tea.java:10) 

Die JVM offensichtlich wird das Argument als Index zu nehmen und nicht das Objekt. Hier ist die vorgeschlagene Lösung auf den anderen Websites gefunden:

myList.remove(new Integer(69)); 

Es ist nicht einmal in Bytecode kompiliert:

Note: Tea.java uses or overrides a deprecated API. 
Note: Recompile with -Xlint:deprecation for details. 

Kompilieren mit:

$javac Tea.java -Xlint:deprecation 

Gibt uns:

warning: [deprecation] Integer(int) in Integer has been deprecated 
    myList.remove(new Integer(69)); 

Ich habe in der veralteten Liste der Dokumentation nachgesehen. Konnte es nicht finden. Sah die Dokumentation der Methode, um es mir erklärt zu haben. Keine Erklärung.

Alles, was ich tun möchte, ist den Parameter als ein Objekt und nicht den Index zu verwenden und meine Rückgabe als Boolean (Dokumentation sagt so), wenn es in der ArrayList war und entfernt wurde.

Gibt es eine Möglichkeit, dies zu tun? Oder ist es veraltet und meine Ctrl + F Suche auf den veralteten Methoden nicht genug?

+0

Google-Such neigt als Strg + F Suche besser arbeiten - [Der Konstruktor Integer (int) ist veraltet] (https://stackoverflow.com/q/ 47095474) – Dukeling

+0

habe ich auch getan. Das war die erste Ressource, aber die Dokumentation ist vollständig. arraylist.remove() ist nicht veraltet, die (neue Integer (69)) ist jedoch. – Beckik

+1

Wenn Ihre Frage die Vernachlässigung von 'new Integer (int)' ist, dann entfernen Sie bitte alle Verweise auf 'ArrayList.remove', da sie irrelevant sind. Außerdem: Bitte fügen Sie der Frage keine Tags zufällig hinzu. [tag: linux], [tag: android] und [tag: performance] haben nichts damit zu tun, was mit deiner Frage zu tun hat. – Bakuriu

Antwort

0

Verwendung Integer Besetzung statt int:

boolean success = myList.remove((Integer) 69); 
+0

Das hat funktioniert, danke !! – Beckik

Verwandte Themen