2012-05-01 20 views
12

私は3次元(リストやマップのようなもの)が必要です。ループ内で2つの文字列と整数で塗りつぶします。しかし、残念ながら私はどのデータ構造をどのように使うのか分かりません。3次元リストまたはマップ

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

3つの値の間の関係は何ですか。 – Attila

+0

JTextFieldsとJButtonから動的に来ます。 – user1170330

+0

[OK]を、それらと_do_したいですか? – Attila

答えて

18

一緒に3をカプセル化するオブジェクトを作成し、配列またはリストに追加する:あなたがデータベースに挿入したい場合は

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を使用して必要に応じて実装します。

+0

ちょうど3つのプロパティを格納するための同様の "コンテナ"クラスが必要です。私はこれらのプロパティをコンストラクタを通して初期化し、私はすべてのプロパティに別々にアクセスする必要があります。クラスにはロジックがなく、3つのプロパティとコンストラクタだけがあります。これらのプロパティにアクセスする最も良い方法は何ですか?この場合、プロパティをpublicとして設定していますか、getterを記述する必要がありますか?プロパティは最終的なものです。 – kazy

+1

よろしいですか?誰があなたを止めますか?それらを公開して最終決定する。彼らはそのように不変です。 OO警察がノックすることを期待してください。 – duffymo

+0

OOの概念に反するものをコーディングしたくないので、私はそれが大丈夫かどうか尋ねています。あなたの答えから、最終的なプロパティはゲッターを必要としないと仮定します。なぜならそれらは変更できないからです。または、この「小規模なケース」の場合にのみ、「最終公開」は大丈夫ですか? – kazy

2

単にクラスを作成

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

答えは値の関係によって異なります。

1)3つの要素すべてを含むカスタムクラスを作成し、このクラスのインスタンスをList<MyData>に追加します。

2)最初の文字列を2番目と3番目のデータに関連付ける(2番目のデータをintに関連付けます):Map>を作成し、要素を追加します(内側のマップを作成する必要があります)

3)重複しないようにしたいが、地図がほしい/必要でない:カスタムタイプ(a'la 1)を作成し、Set<MyData>に入れる

3)GoogleのGuavaコードは次のようになりますミックスとマッチ

9

あなたは簡単にそれを変更することができます下にある構造を上書きしたい場合は

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

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を構築します。

-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); 
    } 
} 
関連する問題