Хранить одну и ту же ссылку на объект с разными значениями на карте
У меня есть требование, чтобы вставить ту же ссылку на объект с другими значениями, как показано ниже:
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, мы имеем вывод ниже
Есть ли способ возобновить существующий объект Test с другим списком элементов в MAP?
map.get("first") //retrieving list with element "Second Element"
map.get("second") //retrieving list with element "Second Element"
Во всяком случае, чтобы достичь этого
2 ответа
Это не совсем понятно в вопросе, но я думаю, вы хотите сделать это:
map.get("first") //retrieving list with element "firstelement"
map.get("second") //retrieving list with element "secondelement"
Для этого необходимо создать еще один Test
объект. Вы должны заменить линию
one.clear();
с
one = new Test();
Вы можете захотеть 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()));