3-мерный список или карта
Мне нужно что-то вроде 3-мерного (например, списка или карты), который я заполняю двумя строками и целым числом в цикле. Но, к сожалению, я не знаю, какую структуру данных использовать и как.
// something like a 3-dimensional myData
for (int i = 0; i < 10; i++) {
myData.add("abc", "def", 123);
}
Ответы
Ответ 1
Создайте объект, который инкапсулирует три вместе и добавит их в массив или List:
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.
Ответ 2
Код Google Guava будет выглядеть следующим образом:
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();
}
});
Если вы хотите переопределить базовые структуры, вы можете легко изменить его.
Ответ 3
Просто создайте класс
class Data{
String first;
String second;
int number;
}
Ответ 4
Ответ зависит от того, какая связь между этими значениями.
1) вы просто хотите сохранить все три в том же порядке, что и они: создайте собственный класс, который включает все три элемента и добавит экземпляр этого класса в List<MyData>
.
2) вы хотите связать строку sirst со вторыми и третьими данными (и сопоставить вторую с int): создать Map > и добавить к ней элементы (вам нужно будет создать внутреннюю карту для каждая новая первая строка)
3) вы не хотите сохранять дубликаты, но вам не нужна/нужна карта. Создайте собственный тип (a'la 1)) и поместите их в Set<MyData>
3) mix-and match
Ответ 5
Вы можете пойти с этим кодом!
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);
}
}