在map中存储具有不同值的相同对象引用

时间:2016-10-15 07:14:10

标签: java collections

我要求使用不同的值插入相同的对象引用,如下所示:

    Test.java:

        class Test {

            private List<String> elements = new ArrayList<String>();
        //add some elements and get

    public void add(String s) {
    this.elements.add(s);
    }

        public void clear() {
            this.elements.clear();
        }
        }

    Map<String, Test> map = new HashMap<String, test>();
    Test one = new Test();
  one.add("firstelement"); //adds to element list
    map.put("first", one);

    //clear and add some more elements
    one.clear();
    one.add("secondelement"); 
    //Add some more elements without creating 
    map.put("second", one);

现在,在检索时,由于我们在MAP中插入相同的测试参考,我们有以下输出

有没有办法在MAP中使用不同的元素列表重新生成现有的Test对象

map.get("first") //retrieving list with element "Second Element"
map.get("second") //retrieving list with element "Second Element"

无论如何要实现这个目标

2 个答案:

答案 0 :(得分:0)

您可能希望将Map定义为:

Map<String, String> map = new HashMap<String, String>();

并更改您添加的内容

one.add("firstelement");
map.put("first", one.get(0));

这需要get中的Test方法:

 public String get(int index) {
        this.elements.get(index);
 }

<强> 修改
如果您希望Map存储对Test个对象的引用,请使用Sweeper的答案
如果您希望Map存储到List个对象,则可以在重用Test之前复制该列表: 将此方法添加到Test

private List<String> getList() {

    return this.elements;
}  

并更改您添加的方式:

 Map<String, List> map = new HashMap<String, List>();
 Test one = new Test();
 one.add("firstelement"); //adds to element list
 //store a refrence to a copy of elements in map
 map.put("first",  new ArrayList<String>(one.getList()));

答案 1 :(得分:0)

这个问题并不是很清楚,但我想你想这样做:

map.get("first") //retrieving list with element "firstelement"
map.get("second") //retrieving list with element "secondelement"

为此,您必须创建另一个Test对象。你应该替换

one.clear();

one = new Test();