Подтвердить что ты не робот

3-мерный список или карта

Мне нужно что-то вроде 3-мерного (например, списка или карты), который я заполняю двумя строками и целым числом в цикле. Но, к сожалению, я не знаю, какую структуру данных использовать и как.

// something like a 3-dimensional myData
for (int i = 0; i < 10; i++) {
    myData.add("abc", "def", 123);
}
4b9b3361

Ответ 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);
    }
}