2012-12-06 8 views
5

2つの列{int、String}を記録するListを作成する必要があります。私はArrayListが私が必要とするものだと思うが、私はそれの周りに私の頭を得ることはできません。私はデータベースから文字列を引っ張りました。intは後で文字列の位置を特定するために必要なインデックス値です。2列のarraylistを初期化する方法は?

List<List<String>> strArray = ArrayList<List<String>>;

私はstrArray.add(のようなものを行うことができます)。私は、データベースから引っ張って行ごとに)(追加しますか?

+1

ハッシュマップを使用する場合は、ハッシュマップを使用します。HashMap そうでない場合は、リストが保持できる新しいクラスを作成します。 –

答えて

13

私はあなたのint値が一意であることを行っている場合は、キーと値としてStringとしてintHashMapを使うべきだと思います。

Map<Integer,String> myMap = new HashMap<Integer,String>(); 
myMap.put(1,"ABC"); 

MapはコレクションとJavaコレクションがintのような原始的な保存しないでと、あなたのintの値についてIntegerラッパークラスを使用する必要があるので、彼らはオブジェクトを格納することに注意してください。

Why can Java Collections not directly store Primitives types?

+0

私は以前はHashMapについて知らなかったが、これを悪いと思う。 – tozhan

0

あなたはintと文字列をクラスにラップして、クラスオブジェクトをListに入れてもよいと思います。

0

マップは、キーを値にマップするオブジェクトです。マップに重複キーを含めることはできません。各キーは最大でも1つの値にマップできます。

私はあなたがkey(Integer)String値を指します指標となりMap<Integer,String>を使用している場合、それは良いだろうと思います。

Map<Integer,String> map = new HashMap<Integer,String>(); 
map.put(1,"str1"); 
map.put(2,"str2"); 
... 
+0

整数文字列の組み合わせに対して疎な配列を使用します。 –

14

別のアプローチは、カスタムオブジェクトを作成することです。このリンクを参照してください:

Class CustomObject { 
    int value1; 
    String value2; 

    CustomObject(int v1, String v2) { 
     value1 = v1; 
     value2 = v2; 
    } 
} 

し、それを使用します。

List<CustomObject> myList = new ArrayList<CustomObject>(); 
CustomObject o1 = new CustomObject(1, "one"); 
myList.add(o1); 
// etc. 

int値はユニークであり、あなたがしたい場合それらを鍵と考えるためには、Mapは他の人が示唆しているように動作します。あなただけの2つの値を必要とする場合

2

あなたはこれを使用すると、値が一意でないint型ならば良い意思決定となりますので、使用することはできません

List<Pair> mPairs = new ArrayList<Pair>(); 

Pair pair = new Pair(123,"your string"); 
mPairs.add(pair); 

ネイティブPairクラスHashMapの

1

をあなたのIDた場合は使用することができます一意ではありません、あなたはまだ地図を使用することができます。

Map<Integer, String> map = new IdentityHashMap<Integer, String>(); 
map.put(new Integer(1), "string"); 

のIdentityHashMap - あなたは、B固有のIDを必要としないので、各オブジェクトのネイティブのhashCodeの実装を使用しますあなたは何かcache mechanismがあるので、演算子 'new'を介してすべての整数を作成しなければならず、オートボクシングを使用しないでください。

キャッシュサイズ '-XX:AutoBoxCacheMax ='を制御するJVMパラメータもあります。 しかし、このパラメータを使用すると、キャッシュを無効にできません。サイズをゼロに設定すると、キャッシュはそれを無視してデフォルトを使用します。[-128; 127]。 このパラメータはIntegersのみに適用されますが、Longにはそのような種類のパラメータはありません。あなたがHashMapを使用することができます

map.put(1, new ArrayList<String>()); 
map.get(1).add("value1"); 
map.get(1).add("value2"); 

:非固有キーを持つ マップ>マップば自分の価値観で

と店舗:あなたはマルチマップのいくつかの並べ替えを使用することができます非ユニークキーのまた

UPDATE 例えば、それのために。

また、Googleマップのコレクションである 'guava'でもMultiMapの実装を見つけることができます。