Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Java]ArrayList
Forum PHP.pl > Forum > Przedszkole
gregi
Szukam zgrabnej konstrukcji arraylist dwu wymiarowej
Czy mogę prosić aby ktoś pokazał implementację wraz z przykładowym mechanizmem zasilania w dane ?
Kshyhoo
  1. int tablica[][] = new int[y][x];
gregi
na tą chwilę mam takiego dziwoląga i się zastanawiam czy da się bardziej uprościć

  1. ArrayList<ArrayList<Integer>> arrayList = new ArrayList<ArrayList<Integer>>();
  2.  
  3. ArrayList<Integer> lista1 = new ArrayList<Integer>();
  4. ArrayList<Integer> lista2 = new ArrayList<Integer>();
  5. ArrayList<Integer> lista3 = new ArrayList<Integer>();
  6.  
  7. lista1.add(1);
  8. lista1.add(2);
  9. lista1.add(3);
  10. lista1.add(4);
  11. lista2.add(5);
  12. lista2.add(6);
  13. lista2.add(7);
  14. lista2.add(8);
  15. lista3.add(9);
  16. lista3.add(10);
  17. lista3.add(11);
  18. lista3.add(12);
  19.  
  20. arrayList.add(lista1);
  21. arrayList.add(lista2);
  22. arrayList.add(lista3);
gregi
Dzięki dobry przykład.
Jednocześnie proszę o wytłumaczenia wskazania "This". W tym przypadku nie rozumiem na jaki obiekt czy pole wskazuje smile.gif
  1. class TwoDimentionalArrayList<T> extends ArrayList<ArrayList<T>> {
  2. public void addToInnerArray(int index, T element) {
  3. while (index >= this.size()) {
  4. this.add(new ArrayList<T>());
  5. }
  6. this.get(index).add(element);
Turson
this bo dziedziczysz ArrayList a on ma taką metodę
gregi
ok
A czy teoretycznie w tym wypadku ten this można pominąć bezpiecznie ponieważ nie przesłaniamy metody?
Dzięki
Turson
Możesz
gregi
  1. ArrayList<Integer> lista = new ArrayList<Integer>();
  2. lista.add(0, ++i);
  3. lista.add(0, ++i);
  4. lista.add(0,++i )
  5. lista.add(0, ++i);


powyższy zapis dodaje na daną pozycję element i przesuwają elementy na nowe pozycje. czyli mamy wynik 4,3,2,1
jak w ArraList zastąpić element w indexie 0 tak żeby nie wstawiało w pole nowego elementu lecz je zastępowało? tak aby po wykonaniu kodu lista zawierała tylko 1 element o indexie 0 o wartości 4?
Kshyhoo
Kontynuuj poprzedni wątek. Łączę.

Używaj bb-code.
Crozin
Zamiast metody add() użyj set() z tymi samymi parametrami.
gregi
ok, dzięki,
jednak jeżeli index wcześniej nie istniał to rzuca mi wyjątek.


  1. Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
  2. at java.util.ArrayList.rangeCheck(Unknown Source)
  3. at java.util.ArrayList.set(Unknown Source)
  4. at SQL.SqlConnector.getFromTable(SqlConnector.java:220


Czyli muszę w pierwszej kolejności dodać obiekt poprzez add (aby stworzyć dany index) a jak chce wymienić to set.
Jeżeli jest jakaś zgrabniejsza konstrukcja to proszę dajcie znać

Crozin
Możesz opisać co właściwie robisz, że potrzebujesz takiego dziwnego rozwiązania?
gregi
Masz racje jest dziwne ale nie dlatego że to potrzebuję, ale dlatego że chce zamienić zwykłe tablice na arraylist. Ale najwidoczniej nie zawsze się opłaca

Jednak mam pytanie smile.gif
jak wyświetlić wewnętrzną tablicę ?
System.out.println( outerArray.get(1).innerArray[1]? ? ?) poniżej w kodzie kontekst


  1. public ArrayList<String[]> getFromTable(String table, String column1, String column2, String column3, String column4) {
  2.  
  3. ArrayList<String[]> outerArray= new ArrayList<String[]>(4);
  4.  
  5. String innerArray[] = new String [4];
  6.  
  7. String query = "SELECT * FROM " + table;
  8. int i = 0;
  9. try {
  10.  
  11. preparedStatement = connection.prepareStatement(query);
  12. resultset = preparedStatement.executeQuery();
  13.  
  14. while (resultset.next()) {
  15.  
  16. innerArray[0]= resultset.getString(column1);
  17. innerArray[1]= resultset.getString(column2);
  18. innerArray[2]= resultset.getString(column3);
  19. innerArray[3]= resultset.getString(column4);
  20.  
  21.  
  22. outerArray.add(innerArray);
  23.  
  24. System.out.println( outerArray.get(1).innerArray?questionmark.gif); // !! jak wyśiwietlić wewnętrzną array
  25. }
  26.  
  27. resultset.close();
  28. preparedStatement.close();
  29.  
  30. } catch (SQLException e) {
  31. System.out.println("Coś poszło nie tak w getFromTable()");
  32. e.printStackTrace();
  33. }
  34. return outerArray;
  35. }
Crozin
Wydaje mi się, że mylisz tutaj kilka rzeczy.
  1. ArrayList<String[]> outerArray= new ArrayList<String[]>(4);
Zmienna outerArray jest Listą, nie tablicą. Może ona przechowywać dowolną ilość obiektów typu String[] w sobie. Wartość 4 jaką podałeś w konstruktorze ArrayList to jedynie początkowa "pojemność" listy - szczegół implementacji ArrayList. Nie ma on nic wspólnego z ilością elementów jakie może przechowywać lista, ani z pojemnością poszczególnych jej elementów.

Cytat
Masz racje jest dziwne ale nie dlatego że to potrzebuję, ale dlatego że chce zamienić zwykłe tablice na arraylist.
Zapewne chcesz zamienić tablice na listę (obojętnie jaką, nie koniecznie ArrayList). W takim przypadku po prostu skorzystaj z:
  1. Arrays.asList(mojaTablica)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.