4

キーと値のペアを格納するために HashMap を使用しています。キーには重複が含まれており、値はリストです。新しいキーが来るたびに値リストをクリアしたい。これまでの私のコードは

Map<Integer, List<Integer> > bandsMap = new HashMap< Integer, List<Integer> >();
List<Integer> erfcn = new ArrayList< Integer >();

for(int i=0 ; i<frequencies.length; i++)
    erfcn.add(frequencies[i]);

bandsMap.put( band_number, erfcn);

ここで行うことは、周波数の配列があり、配列の値をリストに追加してから、リストをマップに配置することです。band_number が同じ場合は問題なく動作します。

最初の 10 回はband_number = 20、単に新しい値をリストに追加し、そのリストをkey=20私のマップに追加するとします。ただし、新しいキーが到着すると、古いキーにも新しいコンテンツが追加されます。

キーが前のキーと同じかどうかを確認してから、リストをマップに配置するだけで、それ以外の場合は最初にリストをクリアしてからマップに追加できますか?

ありがとう

4

2 に答える 2

2

erfcnリストを一度だけ作成しているようです。各bandsMap.put呼び出しは、同じリスト オブジェクトをすべての異なるキーに関連付けています。代わりに、 band_numberごとnewにリストを作成する必要があります。そのキーの既存のリストが存在する場合は、それを再利用する必要もあります。

したがって、次の行を移動します。

List<Integer> erfcn = new ArrayList< Integer >();

bandMap の宣言から離れています。次のように、周波数を追加する関数内で直接宣言します。

List<Integer> erfcn = bandsMap.get(band_number);
if (erfcn == null) erfcn = new ArrayList<Integer>();
于 2013-11-08T15:24:14.330 に答える
1

Listからキーの を取得し、Mapそれに追加できます。

List<Integer> erfcn = bandsMap.get(band_number);

get(band_number)が返された場合はnull、新しい を作成しますList

if (erfcn == null) {
  erfcn = new ArrayList<>();
}
于 2013-11-08T15:18:56.837 に答える