Collections: List/ArrayList Kombination.Was für ein Sinn hat das?

babuschka

Top Contributor
Hallo Community,
habe gerade eine Übung durchgemacht:

Java:
public class IteratorErweiterteForSchleife{
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        
	list.add("Hallo");
	list.add("Leute");
	list.add("von");
	list.add("Heute");

	for (String string : list) {
		System.out.println(string);
	}

    }
}


Meine Frage nun: Was für einen Sinn hat die 3. Zeile?

Java:
List <String> list= new ArrayList<String>();

man muss ja List und ArrayList importieren. Aber warum machen wir das so? Warum importieren wir nicht nur ArrayList oder nur List? Was für einen Sinn hat das?

Also nicht:

Java:
ArrayList <String> list = new ArrayList<String>();

oder

Java:
List<String> list = new List<String>();
 

faetzminator

Gesperrter Benutzer
Letzteres funktioniert nicht, da [c]List[/c] nur ein Interface ist. Die strenge Typisierung von [c]ArrayList[/c] macht ebenfalls keinen Sinn. Um die Funktionalitäten von [c]ArrayList[/c] zu verwenden, benötigt man lediglich die Methoden, welche in [c]List[/c] definiert wurden.
Gehen wir z.B. davon aus, dass man die [c]ArrayList[/c] nachträglich in eine [c]LinkedList[/c] o.ä. abändern will. Mit der von dir geposteten Lösung ändere ich so eine Zeile. Ansonsten müsste je nach Situation viel Code geändert werden. Gerade bei Libs will man dies nicht. List ist List, der Programmierer kann auf [c]get()[/c] etc. zugreifen.
 

Landei

Top Contributor
Stell dir vor, du hast eine Schreinerei und beschreibst, wie du einen Schrank zusammenbaust. Deine Schrauben sind genormt nach ISO0815. Schreibst du in eine Beschreibung "Schrauben 8x20mm der Firma Kunze aus gehärtetem Stahl nach ISO0815" oder "Schrauben 8x20mm nach ISO0815"? Hoffentlich letzteres, denn es völlig irrelevant, wer die Schrauben woraus nach welchem Verfahren herstellt, solange sie der "Norm" entspricht. Nimmst du ein andere Firma, willst du auch deine Beschreibung nicht ändern, oder? Genau diese Abstraktion leisten Interfaces wie List: Wenn du später eine andere Art von Listen verwenden willst, änderst du eine einzige Zeile. Oder schau in die Klasse java.util.Collections, dort gibt es eine sort-Methode für Listen. Hat man da eine eigene Variante für ArrayList, LinkedList, Vector, CopyOnWriteArrayList geschrieben? Nö, eine Methode kann alle Arten von Listen sortieren, sogar deine eigene Listen-Implementierung (wenn du alles richtig gemacht hast). Das funktioniert, indem man sich auf bestimmte Grundeigenschaften, Mindestanforderungen oder Normen einigt, und diese Art "Normvertrag" ist in Java eben ein Interface.
 

mihe7

Top Contributor
Der Husten muss kurz und schwer gewesen sein, wenn man auf der Tastatur vom Anführungszeichen bis zum Stern verrutscht. Evtl. lindert es den Schmerz, wenn man anschließend "Amerikanische-Gleichschaltung" tippt. Das werde ich bei der nächsten Gelegenheit mal im Selbstversuch testen.
 

temi

Top Contributor
Es handelt sich vermutlich um eine Art von Mantra. "Om mani padme hum" - "Amerikanische Gleichschaltung" - alles aus dem Sanskrit...
 

Neue Themen


Oben