erstellt. offensichtlich bedeutet das <String>, dass die Liste aus strings bestehen soll. es funktioniert aber auch, wenn ich es weglasse. warum soll man es dann machen?
Wie du bereits richtig erkannt hast ist eine ArrayList<String>() eine Liste von Strings. Du bekommst damit eine so genannte typisierte Liste.
ArrayList<String> list = new ArrayList<String>() //typisierte Liste vom Typ String ArrayList<MyObject> list = new ArrayList<MyObject>() //typisierte Liste vom Typ MyObject ArrayList list = new ArrayList() //untypisierte Liste ArrayList<Object> list = new ArrayList<Object>() //untypisierte Liste
Beispiel 1 und 2 ergeben eine typisierte Liste. Das heißt du kannst nur Elemente des selben Typs in ihnen speichern. Beispiel 3 und 4 sind untypisierte Listen. Du kannst in ihnen jedes beliebige Objekt speichern.
Welche der beiden Varianten man wählt ist ganz vom Anwendungsfall abhängig. In der Regel sind typisierte Listen empfehlenswert, da man hier bei der Verarbeitung der Liste sich nur auf einen Typ bzw. ein implementiertes Interface beschrenken braucht. Untypisierte Listen sind immer dann notwendig man man mehrer Objekte verschiedenen Typs in einer Liste speichern muss.
Untypisierte Listen sollte man am besten garnicht verwenden! Wenn unterschiedliche Objekte in einer Liste gespeichert werden, solltest du überlegen ob das nicht ein Designfehler ist und diese nicht eigentlich vom selben Typ ableiten sollten.
Abgesehen von der Typsicherheit, sollte man vielleicht noch erwähnen, dass bei typisierten Listen das Casten beim Entnehmen eines Elements entfällt, was etwas Schreibarbeit erspart. Zudem wird man etwa in Eclipse auch gleich auf eventuell falsche Zuweisungen hingewiesen. Der Compiler entfernt die Typisierung im Übrigen wieder, so dass der Bytecode bei beiden Varianten gleich aussieht.
Stimmt nicht ganz, denn man kann den Typ per Reflection auslesen. Wird zum Beispiel von Persistenz Frameworks genutzt, um Konfigurationsarbeit zu vermeiden.
Welchen Typ kann ich per Reflection auslesen? Denn Typ der Liste oder den Typ eines Elements in der Liste? Soweit ich weiß, nutz Java ab 1.5 "Type Erasure", so dass nach dem Übersetzen eine typisierte Liste nicht mehr von einer untypisierten Liste zu unterscheiden ist. Der Compiler fügt sogar die entsprechenden Casts ein. Ein Decompiler kann das leicht zeigen. In den erzeugten Class Files gibt es lediglich noch Signature-Attribute, welche Informationen zu den Typen enthalten, aber zur Laufzeit eigentlich nicht ausgewertet werden.