Вот полная, исполняемая, демо для вас. Вы должны быть в состоянии скомпилировать и запустить как есть. Я не добавил комментарии или проверку ошибок, но он должен делать то, что вы просите. Является ли списки списков лучшей вещью для вашей текущей ситуации, я не знаю. Тот факт, что ваши строки имеют как имена, так и возраст, заставляет меня думать, что вам нужен не список списков, а список объектов строк определенного класса. (В качестве альтернативы вы можете использовать List<?>
или List<Object>
везде ....)
Тем не менее, следующее может представлять интерес для вас. Возможно, вы сможете использовать его, или это может отпугнуть вас от подхода списка списков. :)
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* A ragged 2-D table of strings that supports "views" (arbitrary rows).
*
* WARNING: no error checking. This is just a sketch.
*/
public class Table {
private List<List<String>> data;
private List<Integer> activeRows = new ArrayList<Integer>();
public Table(List<List<String>> data) {
this.data = data;
}
public void setActiveRows(List<Integer> activeRows) {
this.activeRows = activeRows;
}
public void update(int row, int column, String value) {
data.get(row).set(column, value);
}
public void show() {
for (Integer row: activeRows) {
System.out.println(data.get(row));
}
}
/**
* DEMO. Normally we don't put main methods inside a class. This is just a sketch.
*/
public static void main(String[] args) {
List<List<String>> a = Arrays.asList(
Arrays.asList("abc", "def", "ghi"),
Arrays.asList("ABC", "DEF", "GHI"),
Arrays.asList("zzz", "yyy", "xxx"),
Arrays.asList("dog", "cat", "rat")
);
// Make two tables that share the same data
Table t1 = new Table(a);
Table t2 = new Table(a);
// t1 will have all four rows; t2 just two of them.
t1.setActiveRows(Arrays.asList(0, 1, 2, 3));
t2.setActiveRows(Arrays.asList(1, 3));
// Show them
t1.show();
System.out.println();
t2.show();
System.out.println();
// Now change part of t1 and show that this is reflected in t2.
t1.update(1, 2, "NEWVALUE");
// And show them again
t1.show();
System.out.println();
t2.show();
System.out.println();
}
}
Вывод:
[abc, def, ghi]
[ABC, DEF, GHI]
[zzz, yyy, xxx]
[dog, cat, rat]
[ABC, DEF, GHI]
[dog, cat, rat]
[abc, def, ghi]
[ABC, DEF, NEWVALUE]
[zzz, yyy, xxx]
[dog, cat, rat]
[ABC, DEF, NEWVALUE]
[dog, cat, rat]