Szukam zgrabnej konstrukcji arraylist dwu wymiarowej
Czy mogę prosić aby ktoś pokazał implementację wraz z przykładowym mechanizmem zasilania w dane ?
ArrayList<ArrayList<Integer>> arrayList = new ArrayList<ArrayList<Integer>>(); ArrayList<Integer> lista1 = new ArrayList<Integer>(); ArrayList<Integer> lista2 = new ArrayList<Integer>(); ArrayList<Integer> lista3 = new ArrayList<Integer>(); lista1.add(1); lista1.add(2); lista1.add(3); lista1.add(4); lista2.add(5); lista2.add(6); lista2.add(7); lista2.add(8); lista3.add(9); lista3.add(10); lista3.add(11); lista3.add(12); arrayList.add(lista1); arrayList.add(lista2); arrayList.add(lista3);
class TwoDimentionalArrayList<T> extends ArrayList<ArrayList<T>> { public void addToInnerArray(int index, T element) { while (index >= this.size()) { this.add(new ArrayList<T>()); } this.get(index).add(element);
ArrayList<Integer> lista = new ArrayList<Integer>(); lista.add(0, ++i); lista.add(0, ++i); lista.add(0,++i ) lista.add(0, ++i);
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.rangeCheck(Unknown Source) at java.util.ArrayList.set(Unknown Source) at SQL.SqlConnector.getFromTable(SqlConnector.java:220
public ArrayList<String[]> getFromTable(String table, String column1, String column2, String column3, String column4) { ArrayList<String[]> outerArray= new ArrayList<String[]>(4); String innerArray[] = new String [4]; String query = "SELECT * FROM " + table; int i = 0; try { preparedStatement = connection.prepareStatement(query); resultset = preparedStatement.executeQuery(); innerArray[0]= resultset.getString(column1); innerArray[1]= resultset.getString(column2); innerArray[2]= resultset.getString(column3); innerArray[3]= resultset.getString(column4); outerArray.add(innerArray); } resultset.close(); preparedStatement.close(); } catch (SQLException e) { e.printStackTrace(); } return outerArray; }
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.
ArrayList<String[]> outerArray= new ArrayList<String[]>(4);