0

それで、コードのコンパイルのリクエストの後、ここにあります。そして問題は、「B」と呼ばれる2番目のハッシュ要素を追加した後、出力がめちゃくちゃになることです。

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class test {
    public static void main(String[] args) {
        Map<String, List<List<Double>>> alphabet = new HashMap<String,List<List<Double>>>();
        List<List<Double>> something = new ArrayList<List<Double>>();
        List<Double> stuffList = new ArrayList<Double>();
        stuffList.add(3.1);
        stuffList.add(3.2);
        stuffList.add(3.3);
        something.add(stuffList);
        alphabet.put("A", something);
        System.out.println(something);
        System.out.println(alphabet);
        stuffList.clear();
        something.clear();
        stuffList.add(3.4);
        something.add(stuffList);
        alphabet.put("B", something);
        System.out.println(something);
        System.out.println(alphabet);
    }
}

出力は次のとおりです。

[[3.1, 3.2, 3.3]]
{A=[[3.1, 3.2, 3.3]]}
[[3.4]]
{A=[[3.4]], B=[[3.4]]}

私の意見とニーズでは、次のようにする必要があります。

[[3.1, 3.2, 3.3]]
{A=[[3.1, 3.2, 3.3]]}
[[3.4]]
{A=[[3.1, 3.2, 3.3]], B=[[3.4]]}
4

2 に答える 2

4

リストの古いインスタンスをまだ参照しています。これは期待どおりに動作するはずです:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class test {
    public static void main(String[] args) {
        Map<String, List<List<Double>>> alphabet = new HashMap<String,List<List<Double>>>();
        List<List<Double>> something = new ArrayList<List<Double>>();
        List<Double> stuffList = new ArrayList<Double>();
        stuffList.add(3.1);
        stuffList.add(3.2);
        stuffList.add(3.3);
        something.add(stuffList);
        alphabet.put("A", something);
        System.out.println(something);
        System.out.println(alphabet);
        // Create new instances:
        something = new ArrayList<List<Double>>();
        stuffList = new ArrayList<Double>();
        stuffList.add(3.4);
        something.add(stuffList);
        alphabet.put("B", something);
        System.out.println(something);
        System.out.println(alphabet);
    }
}
于 2013-05-22T16:48:30.143 に答える