3-список измерений или карта
Мне нужно что-то вроде 3-измерения (например, список или карта), которое я заполняю 2 строками и целым числом в цикле. Но, к сожалению, я не знаю, какую структуру данных использовать и как.
// something like a 3-dimensional myData
for (int i = 0; i < 10; i++) {
myData.add("abc", "def", 123);
}
5 ответов
создайте объект, который инкапсулирует три вместе и добавьте их в массив или список:
public class Foo {
private String s1;
private String s2;
private int v3;
// ctors, getters, etc.
}
List<Foo> foos = new ArrayList<Foo>();
for (int i = 0; i < 10; ++i) {
foos.add(new Foo("abc", "def", 123);
}
Если вы хотите вставить в базу данных, напишите класс DAO:
public interface FooDao {
void save(Foo foo);
}
реализовать по мере необходимости с помощью JDBC.
в компании Google гуавы код будет выглядеть так:
import com.google.common.collect.Table;
import com.google.common.collect.HashBasedTable;
Table<String, String, Integer> table = HashBasedTable.create();
for (int i = 0; i < 10; i++) {
table.put("abc", "def", i);
}
код выше построит HashMap внутри HashMap с конструктором, который выглядит следующим образом:
Table<String, String, Integer> table = Tables.newCustomTable(
Maps.<String, Map<String, Integer>>newHashMap(),
new Supplier<Map<String, Integer>>() {
@Override
public Map<String, Integer> get() {
return Maps.newHashMap();
}
});
Если вы хотите переопределить базовые структуры, вы можете легко изменить его.
ответ зависит от того, какова связь между значениями.
1) вы просто хотите сохранить все три в том же порядке, что и они: создайте пользовательский класс, который охватывает все три элемента, и добавьте экземпляр этого класса в List<MyData>
.
2) вы хотите связать строку sirst со вторыми и третьими данными (и связать вторую с int): создайте карту> и добавьте к ней элементы (вам нужно будет создать внутреннюю карту для каждого нового первая строка)
3) Вы не хотите хранить дубликаты, но вам не нужна/нужна карта.: Создайте пользовательский тип (a'La 1)) и поместите их в Set<MyData>
3) смешивать и сочетать
вы можете пойти с этим кодом!
public class List3D {
public static class MyList {
String a = null;
String b = null;
String c = null;
MyList(String a, String b, String c) {
this.a = a;
this.b = b;
this.c = c;
}
}
public static void main(String[] args) {
List<MyList> myLists = new ArrayList<>();
myLists.add(new MyList("anshul0", "is", "good"));
myLists.add(new MyList("anshul1", "is", "good"));
myLists.add(new MyList("anshul2", "is", "good"));
myLists.add(new MyList("anshul3", "is", "good"));
myLists.add(new MyList("anshul4", "is", "good"));
myLists.add(new MyList("anshul5", "is", "good"));
for (MyList myLista : myLists)
System.out.println(myLista.a + myLista.b + myLista.c);
}
}