繁体   English   中英

清单 <List<Double> &gt;添加到HashMap

[英]Lists<List<Double>>adding to HashMap

因此,在请求编译代码之后,就在这里。 问题是,在添加了第二个称为“ B”的哈希元素之后,输出混乱了。

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]]}

您仍在引用列表的旧实例。 这应该可以正常工作:

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);
    }
}

在Java中,对象始终通过引用来获取。 意思就是

stuffList.clear();
something.clear();
stuffList.add(3.4);

通过键“ A”对您放置在地图中的相同列表进行操作。

因此,该地图最后两次包含相同的列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM