Вопрос по java, arrays, list, dictionary – Трехмерный список или карта

12

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

<code>// something like a 3-dimensional myData
for (int i = 0; i < 10; i++) {
    myData.add("abc", "def", 123);
}
</code>
Хорошо но хочешьdo с ними? Attila
Вставить в базу данных. user1170330
Они приходят динамически из JTextFields и JButtons. user1170330
Не уверен, какой именно у вас вариант использования, поэтому предоставьте еще один вариант. Если вы можете зависеть от библиотеки с открытым исходным кодом, то вы можете использоватьGuava's Table учебный класс. Aravind R. Yarram
Какова связь между тремя ценностями? Attila

Ваш Ответ

5   ответов
4

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

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

1) вы просто хотите хранить все три в том же порядке, в каком они есть: создайте собственный класс, который охватывает все три элемента, и добавьте экземпляр этого класса вList<MyData>.

2) вы хотите связать первую строку со вторыми и третьими данными (и связать вторую с целым числом): создайте карту & gt; и добавьте к нему элементы (вам нужно будет создать внутреннюю карту для каждой новой первой строки)

3) вы не хотите сохранять дубликаты, но вам не нужна / не нужна карта. Создайте пользовательский тип (a 'la 1)) и поместите их вSet<MyData>

3) смешивать и сочетать

12

гуайява код будет выглядеть так:

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

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

18

который инкапсулирует три вместе и добавьте их в массив или список:

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.

Мне нужен похожий «контейнер» класс для хранения ровно трех свойств. Я инициализирую эти свойства через конструктор, и мне нужно иметь доступ к каждому свойству отдельно. Класс не имеет никакой логики, только эти три свойства и конструктор. Каков наилучший способ получить доступ к этим свойствам? В этом случае все свойства устанавливаются как общедоступные, или я должен написать геттеры? Свойства являются окончательными.
Этот ответ сэкономил мне много времени.
& quot; Против ООПТ понятий & quot;? Там нет ОО полиции. Вы можете делать все, что пожелаете. Вы должны подумать и понять последствия. Вам не нужно разрешение. Это код. Если это не работает, измените его.
Хорошо? Кто остановит тебя? Сделайте их публичными финал; они неизменны таким образом. Ожидайте, что полиция OO прибудет стучать.
Я спрашиваю, все ли в порядке, потому что я не хочу кодировать что-то, противоречащее концепциям ОО. Из вашего ответа я предполагаю, что конечные свойства не требуют получения, так как они не могут быть изменены в любом случае? Или "окончательная публикация" хорошо только в случае этого маленького дела?

Похожие вопросы