Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Syntax error, parameterized types are only available if source level is 1.5 or greater
Syntax error, parameterized types are only available if source level is 1.5 or greater
Eclipse sagt ich soll es mit java 5 (Tiger) versuchen aber ich brauche für mein Programm ein neueres Java.
Leider weiß ich nicht was das ist und wie ich das herausfinden kann. Habe gerade ein bisschen experimentiert
String a = new String("Klaus");
ArrayList meine_Liste = new ArrayList();
meine_Liste.add(a);
so geht es will man dann aber dies machen
String test = meine_Liste.get(a);
System.out.println(test);
dann kommt folgendes
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method get(int) in the type ArrayList is not applicable for the arguments (String)
Das ist vollkommen valider Java-Code. Der funktioniert definitiv.
Magst du mal in Eclipse im Projekt
Rechtsklick auf das Projekt machen -> Properties -> Java Compiler
und mir sagen, Compiler compliance level vorliegt?
Ebenso kannst du mal das Häkchen bei "Use default..." rausmachen und dann überall 1.8 reinpacken.
@ Post # 9
Es gibt in der Arraylist kein get(String). Das würde so auch keinen Sinn machen:
Du übergibst den String um den selben aus der Liste zurückzuholen?
@ Post # 13
meine_Liste ist eine ArrayList. Die meine_Liste[x] Notation ist für Arrays und nur für die. meine_Liste.get(x) wäre der richtige Aufruf.
P.S. Variablen immer klein am Anfang in camelCase: meine_Liste = meineListe
Doch du kannst in einer ArrayList jedes Objekt speichern, "egal" welchen Typ diese Objekt hat (natürlich nur wenn es mit der generischen Typinformation übereinstimmt )
Aber um auf ein bestimmtes Objekt in der ArrayList zuzugreifen musst du mittels Index zugreifen und dieser Index muss ein Integer sein!
Doch natürlich. Nur man sollte sich schonmal die API angucken, was ArrayList für Methoden hat.
Hier mal ein kleines Beispiel:
Java:
ArrayList<String> meineListe =newArrayList<String>();
meineListe.add("Klaus");
meineListe.add("Peter");
meineListe.add("Hans");// Ganze Liste ausgeben weise 1for(String name : meineListe){System.out.print(name +" ");}
meineListe.add("Stefan");
meineListe.remove(2);System.out.println();// Ganze Liste ausgeben weise 2for(int index =0; index < meineListe.size(); index++){System.out.print(meineListe.get(index)+" ");}
meineListe.remove("Klaus");System.out.println();// Ganze Liste ausgeben weise 3
meineListe.forEach(s ->System.out.print(s +" "));}
Es gibt noch mehr Möglichkeiten die Liste auszugeben, aber das sind wohl gängeig Varianten. Du kannst natürlich auch einfach die Liste nehmen, toString auf der Aufrufen und das Ergebnis ausgeben.
Eine ArrayList ist eben so gebaut, dass Sie Elemente der Reihenfolge nach speichert und man über einen Index auf sie zugreift.
Es gibt noch andere Datenstrukturen. Beispielsweise Maps oder Sets, bei manchen kann man zum Beispiel über einen Key zugreifen.
Falls du sowas brauchst
Ehm, du glaubst doch nicht wirklich, dass ArrayList so instabil ist und da einen Referenzvergleich macht, oder?
Java:
for(int index =0; index < size; index++)if(o.equals(elementData[index])){fastRemove(index);returntrue;
Da kommt noch ein bisschen mehr, aber das ist der interessante Teil der Implementation. Natürlich verwendet ArrayList equals und das ist immer korrekt unabhängig vom String Literal Pool.
Ich bin einfach schon zu lange dabei...
Bei Java 1.5 sagt die API von ArrayList bei manchen Methoden (.contains, .lastIndexOf) noch nichts von .equals; bei .remove und .indexOf jedoch wird es genannt. Vmtl. war damals die API-Doku noch etwas fehlerhafter.
Tja, so ist das, wenn manches im Hirn noch aus Java 1.2-Zeiten stammt...