Java ArrayList jak odczytać dane z struktury dwuwymiarowej

0

Czy mógłby mi ktoś "łopatologicznie" wytłumaczyć jak "dobrać" się do danych z podlisty

ArrayList al = new ArrayList();
ArrayList tab= new ArrayList();
int a,b,c;
a=10;
b=12;
c=13;
tab.add("wew tablica");
tab.add(b);
tab.add(c);
System.out.println("Initial size of al: " +
al.size());
// add elements to the array list
al.add("C");
al.add("A");
al.add("E");
al.add("B");
al.add("D");
al.add("F");
al.add(1, "A2");
al.add(tab);
System.out.println("Size of al after additions: " +
al.size());
Object fl=al.get(7);
Object obj=fl.get(0);
String liczba=fl.toString();
System.out.println("pozycja o indeksie 7 = "+liczba);
 

Chciałbym pobrać "0" element z ArrayList [tab] który jest zagnieżdżony w [al], w Pythonie to było prozaiczne ... a tu nie potrafię
do tego dojść.
Pozdrawiam

1

W Pythonie działało ponieważ Python ma duck-typing, coś czego wielu ludzi (w tym ja) nie lubi. Rozwiązania masz dwa:

  1. Toporne i nieeleganckie: rzutowanie.
  2. Generyki i tworzenie wyspecjalizowanych list, np lista dla stringów, lista list, lista intów, itp

http://download.oracle.com/javase/tutorial/java/generics/index.html

0

Czyli rozumiem że w javie nie jest wskazane mięszanie różnych typów w danej liście?
Przepraszam za "lamerskie" pytania... ale próbuję przenieść aplikację z Pythona na Javę i
właśnie "poległem" na listach ... które bardzo ułatwiały mi życie w aplikacji Pythonowej.
Praktycznie tam był dostęp do danych po indeksie.... wiec rozwiązanie javowe to dla mnie lekki kosmos ;)
Dziekuję za odpowiedź

0

Nie tylko w Javie, w dowolnym języku z generykami, np Java, C#, C++, Scala, Haskell, itp
Statyczna kontrola typów w tych językach powoduje między innymi:

  • sprawdzanie wielu rodzajów błędów na etapie kompilacji, a nie wykonywania (szczególnie ważne przy rzadko używanych, ale bardzo ważnych modułach),
  • pozwala na dużo lepszą efektywniejszą analizę składniową, a co za tym idzie dużo lepsze podpowiedzi w IDE,

No chyba, że robisz pattern matching, taki jaki jest dostępny w Scali czy Haskellu, wtedy niewyspecjalizowane listy w niewielu sytuacjach się przydają. Przykłady pattern matchingu w Scali: http://www.scala-lang.org/node/229 , http://www.scala-lang.org/node/52 , http://www.scala-lang.org/node/53 (konstrukcje ze słowem kluczowym match, z tym że w tych przykładach i tak jest specjalizacja, tzn nieogólne typy).

0

Widzę że "przenosiny" na Javę nie są tak bezbolesne jak mi się z początku wydawało ;). Dziękuję za odpowiedzi i porady. Nie zostaje nic innego jak zabrać się do tego w "Javowy" sposób. Alternatywne rozwiązanie to przepisanie interfejsu w Jythonie i kompilacja do bytecode Javy ... ale to trochę "hardcorowe" rozwiązanie. Pozdrawiam

0

No cóż, wg mnie duck-typing, przynajmniej na początek, uczy złych nawyków.

0

Powiem tak ... wieki temu "klepałem" trochę w czystym C (wtedy dopiero powstawały założenia standardu do C++) więc możliwość "bezbolesnego" tworzenia list i to w takiej formie jak pozwala Python stało się dla mnie zbawieniem ;) , Javy nie ruszałem dopóki nie było potrzeby .... ale czasy się zmieniają i potrzeby też :) . Dziękuje za poświęcenie mi czasu

0

Dlatego polecanie Pythona nieznającym jeszcze innego języka (ale nie piszę tu o autorze) jest co najmniej takie sobie ;)

0

Przeglądam inne wątki dotyczące Javy i JVM ... widzę że (być może) pewnym rozwiązaniem będzie "zabranie" się za Scale, ale ten wątek zostawiam sobie na śniadanie :). A co do Pythona ... przyjemny w dotyku, nie gryzie ;) Ale zdecydowanie polecany tym którzy wiedzą co robi program w pamięci ;) Chodź trzeba przyznać że brak statycznego typowania może przeszkadzać ... a z drugiej strony pewne rzeczy robi się zdecydowanie prościej ... jak przykład powyżej :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1