【发布时间】:2013-03-12 14:48:39
【问题描述】:
我有一个 HashMap,我将 HttpSession 对象作为键,将 HashSet 作为值
HashMap<HttpSession, HashSet<String>> map = new HashMap<HttpSession, HashSet<String>>();
我有一个 HttpSession 监听器,我需要检查天气会话对象是否存在于地图中
public void sessionDestroyed(HttpSessionEvent se) {
HashMap<HttpSession, HashSet<String>> map = //Get map object
HttpSession session = se.getSession();
if(map.containsKey(session)){
//TODO Code goes here
}
}
IF 条件总是返回 false,即使映射中存在会话对象(手动检查映射条目)。我被卡住了!!!
【问题讨论】:
-
你应该使用不可变对象作为关键,在这种情况下你不能保证基于
HttpSession实现的相等性所以使用Stringid返回的getId() -
您要为地图分配什么价值,请同时显示该代码。因为当我们打开页面时会话 id 是不同的,并且在成功登录后会话 id 变成了其他东西。所以请告诉我你的 hashmap 是如何创建的
-
//一些代码 HttpSession session = request.getSession(true); HashSet
set = new HashSet (); if(session.isNew()) map.put(session, set); //一些代码 -
当您将对象放入地图和从
HttpSessionEvent检索对象时,请尝试打印对象的hashcode。看看它们是否不同。 -
@Santosh 你是对的 HashCode 是不同的,尽管两者的状态似乎相同。
标签: java hashmap httpsession