Mögliche Duplizieren:
List versus ArrayListOOP: Unterschied zwischen ArrayList al = new ArrayList() und List al = new ArrayList()?
Unterschied zwischen
ArrayList al = new ArrayList()
und
List al = new ArrayList() ?
Mögliche Duplizieren:
List versus ArrayListOOP: Unterschied zwischen ArrayList al = new ArrayList() und List al = new ArrayList()?
Unterschied zwischen
ArrayList al = new ArrayList()
und
List al = new ArrayList() ?
Keine, aus einer Schöpfungsperspektive. Beide erstellen eine Instanz von ArrayList
.
Der Unterschied ist, dass in ihrem zweiten Beispiel ermöglicht al
Zugriff auf alle auf der List
Schnittstelle während implementierten Methoden, im ersten Beispiel ermöglicht al
Zugriff auf alle (barrierefrei) Methoden und Felder der ArrayList
Klasse.
Eine praktische Faustregel: Verwenden Sie das zweite Muster. Wenn Sie einige zusätzliche Goodies aus der ArrayList
Implementierung benötigen, dann können Sie immer Stimmen:
List list = new ArrayList();
// do some adds/removes/... on the list
((ArrayList) list).trimToSize();
Seine prog genannt Rammen zur Schnittstelle. Angenommen, Sie müssen diese list
von Ihrer Methode zurückgeben. So kann der aufrufende Code das in eine List
Variable haben.
public ArrayList getList() {
ArrayList list = new ArrayList();
// do something with the list here
return list;
}
Und das
public List getList() {
List list = new ArrayList();
// do something with the list here
return list;
}
Jetzt für die letztere Methode aufrufen Code kann die zurückgegebene Liste in List
Typ Variable haben. Und Sie können leicht später entscheiden, aus irgendeinem Grund, so etwas wie dieses,
public List getList() {
List list = new LinkedList();
// do something with the list here
return list;
}
Keine Änderung Code in Berufung, während mit dem ehemaligen müssen Sie den Rückgabetyp ändern, die schließlich die Berufung Code vermasseln würde auch .
PLZ erklären im Detail –
@Hari Kanna: Ich habe gerade das getan :). –
paraphrasiert my answer-this very similar question über Map
vs. HashMap
:
Es gibt keinen Unterschied zwischen den Objekten. Es gibt einen Unterschied in der Schnittstelle Sie haben das Objekt. Im ersten Fall ist das Interface ArrayList
, während es im zweiten Fall List
ist. Das zugrunde liegende Objekt ist jedoch das gleiche.
Der Vorteil der Verwendung von List
ist, dass Sie das zugrunde liegende Objekt als eine andere Art von Liste ändern können, ohne Ihren Vertrag mit irgendeinem Code zu brechen, der es verwendet. Wenn Sie es als ArrayList
deklarieren, müssen Sie Ihren Vertrag ändern, wenn Sie die zugrunde liegende Implementierung ändern möchten.
Ah, und es stellte sich heraus, dass es ein genaues Duplikat mit "List" gab. :-) –
Thnk u abdreas D aber 1 Sache, was ist die Faustregel? –
@Hari kanna - Verwenden Sie einen Schnittstellentyp, falls verfügbar, so 'List' oder sogar' Collection'. Das mache ich in 99,5% aller Fälle. –