HashMap<StringBuilder, StringBuilder> aMap = new
HashMap<StringBuilder, StringBuilder>();
StringBuilder emp = new StringBuilder("Stack");
StringBuilder val = new StringBuilder("Programmer");
aMap.put(emp, val);
emp = new StringBuilder("sss");
System.out.println(aMap);`
Хотя значение emp
значение chnaged, оно не отражается в HashMap. Это потому, что HashMap использует какой-то конструктор копий при добавлении нового значения?HashMap - Значение ключа изменения
Сейчас подходит к WeakHashMap:
WeakHashMap<StringBuilder, StringBuilder> aMap1 =
new WeakHashMap<StringBuilder, StringBuilder>();
StringBuilder emp1 = new StringBuilder("WeakStack");
StringBuilder val1 = new StringBuilder("Programmer");
aMap1.put(emp1, val1);
emp1 = new StringBuilder("WeakStack1");
После некоторых GC вызовов aMap1
становится пустой. Почему так? Это потому, что ключ, указывающий на, больше не существует?
Обновление: Я понимаю из ответов, что ключ ссылочных из HashMap, поэтому при emp
(изменяемый ключ) в выше HashMap
изменяется путем добавления строки в ней, как emp.append("changed")
, она отражает в HashMap
. То же самое верно для WeakHashMap
(если измененный ключ изменен/обновлен, это отражается). Это означает, что на этот ключ ссылаются от WeakHashMap.
Может ли кто-нибудь объяснить, что такое WeakHashMap
реализация, отличающаяся тем, что ключ может быть собран из мусора, хотя на него ссылаются?
Спасибо.
Спасибо! Теперь я понимаю. У меня есть еще один вопрос. См. Обновление – user2296988
@ user2296988. Читайте о 'WeakReference' для более подробной информации. – Eran