如何为地图创建相同列表的更多实例?

时间:2013-12-15 20:56:03

标签: java list map hashmap

我们说我有一张地图和一张清单。如何为不同的密钥添加更多列表?我知道列表是通过引用传输的,但是最接近这个的方法是什么?

    Map<Integer, List<Integer>> moves = new HashMap<Integer,List<Integer>>();
    List<Integer> values = new LinkedList<Integer>();

    //Populate the map of moves to use it later for equation verification
    values.add(6);values.add(9);
    moves.put(0, values);
    values.clear();
    moves.put(1, values);
    values.add(3);
    moves.put(2,values);
    values.clear();
    values.add(2);values.add(5);
    moves.put(3, values);
    values.clear();
    moves.put(4, values);
    values.add(3);
    moves.put(5,values);
    values.clear();
    values.add(0);values.add(9);
    moves.put(6,values);
    values.clear();
    moves.put(7, values);
    moves.put(8, values);
    values.add(0);values.add(6);
    moves.put(9, values);

2 个答案:

答案 0 :(得分:2)

您可以创建ArrayList的新实例,其中包含您的值。

moves.put(0, new ArrayList<Integer>( values ));

这样,您不需要每次都将values引用关联到新对象。

答案 1 :(得分:1)

您必须创建一个新对象。如果不是,则在所有键中放置相同的实例,并且当您从map中检索其值时,所有键都具有相同的实例。

Map<Integer, List<Integer>> moves = new HashMap<Integer,List<Integer>>();
List<Integer> values = new LinkedList<Integer>();

//Populate the map of moves to use it later for equation verification
values.add(6);values.add(9);
moves.put(0, values);
values = new LinkedList<Integer>();
values.add(8);
moves.put(1, values);