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

はい、更新されます。

この背後にある理由は、もちろんアクセサーがオブジェクトのコピーを返さない限り、Java のすべてのオブジェクトが参照によって渡されるためです。

于 2013-03-01T04:10:29.157 に答える
0

マップは引き続きセッションに残ります。ただし、この場合は WeakHashMap を使用することをお勧めします。以下のリンクを参照してください

弱いハッシュマップの議論

于 2013-03-01T04:00:20.783 に答える