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