Java.ArrayList. Methode remove()
ArrayList haben metod remove(int index)
und remove(Object o)
, so
ich versuche diesen code ausführen:
public static void main(String args[]){
ArrayList<Long>ar=new ArrayList<Long>();
ar.add(11L);
ar.add(22L);
ar.add(33L);
ar.remove(new Integer(33)); //1
byte b =0;
ar.remove(b); //2
for(Iterator i=ar.iterator(); i.hasNext();)
{
System.out.println(i.next());
}
}
im Ergebnis habe ich:
22
33
Meine Frage:
-
in Zeile 1-parameter Integer - warum wir keine Ausnahme?
-
line 2 - paramenet byte - seine nicht int und nicht Objekt, warum nicht die Ausnahme wieder?
- also, wenn ich richtig verstehe für die Linie 1 haben wir diese situation: in unserer Liste, die wir Lange, so dass, wenn wir versuchen, entfernen ausführen-Methode, die wir haben: Wenn(Ganzzahl.gleich(Lang)) "false" zurückgibt, ist unsere Liste nicht geändert.
- und weiter. byte -> int. seine richtige. aber wenn ich dies Tue: long b =4654654654654654654L; long int - imposible.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
remove(..)
Methode ist nicht generisch. Er akzeptiert jedes Objekt, und nicht das check seiner Klasse. Der Zustand sollte es meed, um für ein element zu entfernen, ist dieequals(..)
Methode den Wert true zurück, wenn im Vergleich zu einem element in der Sammlung. Das element 33 wird nicht entfernt, weilLong.equals(..)
zurückfalse
wenn das andere Objekt nichtinstanceof Long
den
byte
interpretiert wird als der index.byte
primitiv aus, wie einjava.lang.Byte
- Objekt und ruftArrayList.remove(Object)
. 57: aload_1 58: iload_2 59: invokevirtual #15; //Method java/util/ArrayList.entfernen:(I)Ljava/lang/Object;Weil diese beiden bekommen cast auf den korrekten Typ. In den ersten ein, es ist remove(Object o), wobei o ist Integer(33). Aber es dooesn nicht finden dieses Objekt in der arraylist, so gibt Sie ein false zurück, da gemäß der Definition:
Die zweite bekommt wahrscheinlich cast in einen int-du bist also das entfernen des ersten index.
1) übergeben Sie ein Objekt, das nicht in der Liste. Also passiert nichts.
2) Es ist nicht ein Objekt, das übergeben wird, sondern ein index (0). Also das erste element in der arraylist entfernt wird.
Nothing happens
ist nicht ganz richtig, es gibt Sie false zurück.Java hat eingebaute autoboxing zu sparen Sie Zeit Typisierung verschiedene numerische Darstellungen. Kein Fehler, da ein Java-zahlen, was Sie meinte und wandelt es für Sie.
Nehmen Sie einen Blick auf die javadocs. ArrayList.entfernen Sie nimmt ein Objekt und ein Integer ist ein Objekt.
[update] vergessen, die zweite Frage zu beantworten.
Byte funktioniert, weil ich glaube, es ist entweder autoboxed in ein Objekt oder es ist die Verallgemeinerung auf ein int als index.