2016-09-15 14 views
0

私のスーパークラスは、HashMap "M"の値を持ち、その値はArrayListであり、キーの範囲は0〜Nです。特定の行 "x"(Mapのキー)のArrayListをとり、別の行 "y"とスワップするサブクラスでswap()というメソッドを作成しました。以下はおおよそスワップ()メソッドがどのようにされていますMap for Javaの中にあるArrayListをスワップ/アップデートするより良い方法はありますか?

public void swap(int currentRow, int hRow) { 
    ArrayList <Double> temp = new ArrayList<Double>(super.M.get(hRow)); 
    M.put(hRow, super.M.get(currentRow));\\from super 
    M.put(currentRow, temp);\\ from super 
} 

これは間違いなく私がしたい仕事をしていませんが、より効率的な方法がある場合、私は不思議でしたか?特に配列 "temp"を作成せずに、つまりJavaマップ関数を使用するだけで、同じことができますか?

編集1:私は理解して が新しいのArrayListを作成せずに上記を行うための方法ですが、どのような場合は、その特定のArrayListのは、私のような定数2とアップデートでのArrayListに乗算値にしたいとしましょうその後、一時的な配列を作成せずにそれを行うことはできますか?

+1

「super.M.get(hRow)」をarraylistに入れるのはどうでしょうか?なぜあなたは一時割り当てを必要としますか? – Maroun

+0

あなたの質問には、もう一つの不透明な 'Object'として' ArrayList'が含まれています。それについて何も詳述する必要はなく、マップキーの値を入れ替えるだけです。また、クラス階層も問題には関係しません。 –

+0

@ceeks Re:** Edit 1 **:この場合、全く異なる質問です。下の回答はあなたが求めた*実際の質問に答えます。 – Thomas

答えて

1

あなたはそれをしない、余分のArrayList tempを作成したくない場合は:あなたが行うことができる新しいArrayListを作成する理由は、

public void swap(int currentRow, int hRow) { 
    ArrayList<Double> temp = super.M.get(hRow); 
    super.M.put(hRow, super.M.get(currentRow)); 
    super.M.put(currentRow, temp); 
} 
0

ありません:

ArrayList<Double> temp = super.M.get(hRow); 
super.M.put(hRow, super.M.get(currentRow)); 
super.M.put(currentRow, temp); 

またはputが古い値を返す場合、次のように書いてもよい:

ArrayList<Double> temp = super.M.put(hRow, super.M.get(currentRow));  
super.M.put(currentRow, temp); 

または偶数:

関連する問題