如果我把地图放在会话中。然后,如果我从地图中删除一个对象。这会改变会话中的地图还是我必须再次将地图放入会话中?
Map map = new HashMap();
map.put("1", "1");
map.put("2", "2");
map.put("3", "3");
map.put("4", "4");
Session session = getSession();
session.setAttribute("myMap", map);
map.remove("1");
答案 0 :(得分:3)
是的,它会在会话中更新地图......
Map map = new HashMap();
map.put("1", "1");
map.put("2", "2");
map.put("3", "3");
map.put("4", "4");
session.setAttribute("myMap", map);
map.remove("1");
Object mapw = session.getAttribute("myMap");
out.println(mapw);
<强>输出强>
{3=3, 2=2, 4=4}
答案 1 :(得分:1)
会话保留对您放入的对象的引用。 如果更改地图的内容,则地图对象引用不会更改。它仍然是相同的地图,因此会话中的信息也会发生变化。
像这样:
Map original_map = new HashMap();
session.setAttribute("myMap", original_map);
// Now put something into original_map...
// The _content_ of the map changes
// Later:
Map retrieved_map = session.getAttribute("myMap");
// you'll find that retreived_map == original_map.
// They're the same object, the same Map reference.
// So the retrieved_map contains all that you put into the original_map.
答案 2 :(得分:0)
您的地图仍保留在会话中。但是,在这种情况下使用WeakHashMap可能是更好的做法。请参阅以下链接
答案 3 :(得分:0)
是的,它会更新。
这背后的原因是Java中的所有对象都是通过引用传递的,除非访问者返回对象的副本。