Хранить одну и ту же ссылку на объект с разными значениями на карте

У меня есть требование, чтобы вставить ту же ссылку на объект с другими значениями, как показано ниже:

    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()));
Другие вопросы по тегам