Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在地图中存储具有不同值的相同对象引用_Java_Collections - Fatal编程技术网

Java 在地图中存储具有不同值的相同对象引用

Java 在地图中存储具有不同值的相同对象引用,java,collections,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); }

我需要插入具有不同值的相同对象引用,如下所示:

    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<String, String> map = new HashMap<String, String>();
这将需要
测试中的
获取
方法:

 public String get(int index) {
        this.elements.get(index);
 }
编辑
如果希望
Map
存储对
Test
对象的引用,请使用清扫器的答案。

如果希望
Map
存储到
List
对象,可以在重用
Test
之前复制该列表: 将此方法添加到
测试中

private List<String> getList() {

    return this.elements;
}  
private List getList(){
返回此元素;
}  
并更改添加到的方式:

 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()));
Map Map=newhashmap();
测试一=新测试();
一、添加(“第一要素”)//添加到元素列表
//在地图中存储对元素副本的引用
put(“first”,新的ArrayList(one.getList());

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

map.get("first") //retrieving list with element "firstelement"
map.get("second") //retrieving list with element "secondelement"
为此,必须创建另一个
Test
对象。你应该换一条线

one.clear();


每次我需要的时候,我都必须重用现有的对象,而不是创建新的对象。然后,我认为没有任何方法可以做到这一点,除了另一个答案中显示的方法,该方法要求您更改地图的类型@ramupasupleti您不能重复使用它并期望它保存已清除的值。@ramupasupleti太糟糕了。没有办法同时做这两件事。这似乎不合逻辑,因为你在与语言作斗争。当你清除地图外的第一个时,你也在清除地图内的第一个。您所做的所有更改都反映在这两个地方,因此创建一个新列表似乎是唯一合乎逻辑的方法。但是,如果他们像他们的示例中那样清除一个
,那么您是否索引到该列表中并不重要。值将消失不?
Map
不存储对
one
的引用,而是对
one(index)
的字符串值的引用啊,我知道你现在在做什么了。我想这是他们所能得到的最好的结果,假设他们不希望得到一系列的值。我不完全理解OP想要实现什么。在重新创建
one
之前,我添加了一个存储数组列表值的选项。我假设这是一个X-Y问题,因为描述似乎与Java的行为“背道而驰”。
map.get("first") //retrieving list with element "firstelement"
map.get("second") //retrieving list with element "secondelement"
one.clear();
one = new Test();