会话如何在java中工作?

时间:2013-03-01 03:53:12

标签: java session map hashmap

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

            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 个答案:

答案 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可能是更好的做法。请参阅以下链接

Weak Hash Map Discussion

答案 3 :(得分:0)

是的,它会更新。

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