Aus verschachtelter ArrayList auf einen Wert zugreifen

Stefan309

Mitglied
Hallo liebes Java Forum,

ich bin einbisschen am experimentieren mit ArrayLists und meine recherche auf google ergibt keinen Treffer. Folgendes ist gegeben:

[CODE lang="java" title="ArrayTest"]public class ArrayTest {

public static void main(String[] args) {
ArrayList<Object> strangeList = new ArrayList<>();

strangeList.add("dse");
strangeList.add(3823);
strangeList.add(new int[] { 329, 23882, 55, 932 });

System.out.println(strangeList.size());

}
}[/CODE]

Wie wir sehen können gebe ich als Typargument Object, sodass ich in die ArrayList beliebige Objekte hinzufügen kann. Wie greife ich nun im Index 2 auf z.B. den Wert 55 zu. StrangeList.get(2) gibt mir ein Objekt zürück. Ich will aber nicht den int array Objekt sondern auf dessen Werte zugreifen und diese in der Konsole ausgeben. Ich denk mir sowas sollte ich eigentlich schon können aber ich komme gerade nicht darauf 😀. Brauch man dafür jetzt wirklich zwei for schleifen, damit ich über die Werte iterieren kann und so drauf zugreife oder geht das auch einfacher?
 
Also erst einmal sollte klar sein, dass dies etwas ist, das in der späteren Praxis nicht vorkommen sollte... Denn in der ArrayList kann ja prinzipiell alles sein ...

Was drin ist, kannst Du prüfen, z.B. mittels instanceof. Dann kannst Du einen cast machen und so hast Du dann einen Variable vom gewünschten Typ. Also etwas wie:
Java:
if (obj instanceof String) {
    String string = (String) obj;
    // ...
}

Edit: Nur den ersten Punkt noch in Kürze erläutert: Du hast mit Java eine typsichere Sprache. Du hast also Variablen von einem bestimmten Typ und kannst dann entsprechend damit umgehen und der Compiler prüft alles für dich. Das wirfst Du mit so Code weg und das versucht man zu vermeiden.
 
Hallo Kneitzel,

danke für die Antwort. Ich glaube man kann in diesem Fall gar nicht direkt auf eine Zahl zugreifen. Das verblüfft mich bisschen. Mit dem If statemant kann man auch nach int arrays prüfen? Ich glaube eher ob es sich um ein int handelt so meintest du das richtig?

Das man das in der Praxis vermeidet verstehe ich natürlich. Wir experimentieren bisschen 😀
 
Natürlich kannst du auch Arrays prüfen. Also instanceof int[] .... wenn Werte von außen kommen, dann willst du evtl auch instanceof Integer[] prüfen.

Ein int kann es aber nicht sein. Da es von Object abgeleitet sein muss würde hier ein Boxing stattfinden: das int wird automatisch in einen Integer gepackt.

Was man hier ggf. noch beachten muss: Generics existieren beim Übersetzen aber nicht zur Laufzeit. Daher kann man nicht auf etwas prüfen wie instanceof List<String> oder so.
 
Es ist zu diesem Zeitpunkt das richtige sich mit dem Debugger zu beschäftigen. Wechsle in die Debug Perspective, Wenn nicht vorhanden aktiviere Variable view. offne dein projekt und öffne das zu überprüfende elemen ArrayTest. setze durch doppelklick toggelmarken an den Rand der zeilennummer Im Menue findest du Debug as Java Application. löse es aus. Im view debug erschein der gespeicherte verlauf im View Breakpoint erscheinen deine Brakepoint =Toggel klicke auf den ersten.Mit den Button step into bewegst du dich durch alle Brakepoints bzw. auch durch die Klassen die für dein Program notwendig sind (Klassen methoden) Achtung da wird auch mal einb anderes fenster geöffnet aber durch weiteres drücken kommt man zum nächsten Brakepoint. Dann kann man im Variable View die augenblicklichen Werte überprüfen, einige Werte muß man aufklappen wie Ordner Bei deinem Beispiel habe ich die 55 unter [2][2] gefunden
 

Neue Themen


Zurück
Oben