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();
    }
});

Если вы хотите переопределить базовые структуры, вы можете легко изменить его.


просто создайте класс

 class Data{
  String first;
  String second;
  int number;
 }

ответ зависит от того, какова связь между значениями.

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);
    }
}