2012-04-03 4 views
0

私はJavaにはまったく新しいです。基本的には配列のリストにいくつかのデータがありますが、それはうまくいきますが、プログラムの後半でリストを読む必要があり、リストが非常に大きくなるので時間がかかります。だから私は配列リスト(後で必要なもの)の特定の部分をハッシュマップに入れて、後で配列リストのその部分を抽出できると思った(うまくいけば意味がある)。配列リストのハッシュマップを作成しても期待通りに動作しない

私が最初に(私はループがあり、シングルループdata_cache_local_loopで作成された各データのthatsを呼び出す)私が望むすべてのデータを配列リストを作成します。

HashMap hashmap_of_values = new HashMap(); //hashmap of arraylist 
for (int i = 0; i<100; i++) { 
....program logic and more loops 
Set uniqie_T_cache = new HashSet(T_cache_local_loop); //make values unique 
hashmap_of_values.put(i, new ArrayList(uniqie_T_cache)); 
} 

その後、私はデータを必要なときに、私は

List t = new ArrayList(); 
t.add(hashmap_of_values.get(i)); 

私のプログラムは失敗し、正確な理由はわかりません。 hashmap_of_valuesのサイズをプリントアウトすると、私は期待している数を得ることができますが、Tの数だけを表示すると1つしか表示されません(プログラムを実行すると、T_cache_local_loopには何百もの項目があります)。

私が間違っていることを誰にでも教えてもらえますか?私は100%ではありませんが、私は単なるアイテムとして追加する配列リストを見ているかもしれませんが、私が間違っていることはわかりません。

+0

正直なところ、私は理解したことがない一つのことは、私は編集する権限を持っているが、私は一人で/レビュー編集を受け入れることができないということです。あまりにも意味をなさないIMO、私は自分でそれを行う必要があります...しかし、編集が保留中であるので、私は自分でそれを行うことはできません。 – alternative

答えて

4

あなたは本当にジェネリックを使用する必要があります - それはあなたに多くのことを助け、そしてこれらの問題ははるかに明らかにするだろう - しかし、一瞬のために、あなたの問題は、その行が

List t = (List) hashmap_of_values.get(i); 

または

でなければならないことです
List t = new ArrayList((List) hashmap_of_values.get(i)); 

地図のリストのコピーを取得する。 hashmap_of_values.get(i)はすでにリストになっていたので、でした。リストのリストを作成していました。

+1

基本的にOPのコードは、値のリストの代わりに値のリストのリストを作成しているためです。 (明らかでなかった場合)。 –

+1

あなたの右。私はそれをやっていると思ったが、それをやめる方法がわからなかった。 t変数を作成するときに単純にリストをキャストできることはわかりませんでした。どうもありがとうございます。 –

1

あなたのArrayListにごHashSetを追加すると、あなたがArrayListの最初のインデックスへの単一のオブジェクトとして全体のセットを追加しているt.addAll(hashmap_of_values.get(i));

0

をしようとしています。あなたはではなくです。HashSetの各要素をArrayListに追加しています。代わりに、あなたのような何かをする必要があります。

List newList= new ArrayList(); 
newList.addAll(unique_T_cache); 
hashmap_of_values.put(i, unique_T_cache); 
関連する問題