1

如果我在会话中放一张地图。然后,如果我从地图中删除一个对象。这也会改变会话中的地图还是我必须再次将地图放入会话中?

            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");
4

4 回答 4

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}
于 2013-03-01T04:01:10.427 回答
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.
于 2013-03-01T03:56:53.383 回答
0

您的地图仍保留在会话中。但是,在这种情况下使用 Wea​​kHashMap 可能是更好的做法。请参阅以下链接

弱哈希图讨论

于 2013-03-01T04:00:20.783 回答
0

是的,它会更新。

这背后的原因是 Java 中的所有对象都是通过引用传递的,除非访问器当然返回对象的副本。

于 2013-03-01T04:10:29.157 回答