在users中,放了username-->UserInfo的组合,通过Iterator 将其中的所有对象取出. 例:
HashMap map = new HashMap();
map.put("James","123-345-5555");
map.put("Wang Ming", "233-333-3232");String phone = (String)map.get("James");
HashMap map = new HashMap();
map.put("James","123-345-5555");
map.put("Wang Ming", "233-333-3232");String phone = (String)map.get("James");
现将此bean代码贴上来,版权不是我的,望作者莫怪,大家共同研究
我只知是得道在线用户的,具体怎么得的我不太清楚,还清helpall、moumouren赐教
package oa.online;import java.util.*;public class OnlineState
{
static private OnlineState instance;
private HashMap users;
private int timeout; public void setUserInfo(int userId, String username, int departmentId, String departmentName)
{
users.put(new Integer(userId), new UserInfo(userId, username, departmentId, departmentName, new Date()));
} public boolean isOnline(String username)
{
boolean cotained =false;
Iterator it = users.entrySet().iterator();
while(it.hasNext())
{
UserInfo user = (UserInfo)((Map.Entry)it.next()).getValue();
if(user.username.equals(username)&&(System.currentTimeMillis() - user.time.getTime())/1000 < timeout)
{
cotained = true;
break;
}
}
return cotained;
} public Object[] getOnlineUserInfos()
{
Iterator it = users.entrySet().iterator();
ArrayList list = new ArrayList();
while(it.hasNext())
{
UserInfo user = (UserInfo)((Map.Entry)it.next()).getValue();
if((System.currentTimeMillis() - user.getTime().getTime())/1000 < timeout)
{
list.add(user);
}
}
return list.toArray();
} public boolean isOnline(int userId)
{
return users.containsKey(new Integer(userId))&& (System.currentTimeMillis() - ((UserInfo)users.get(new Integer(userId))).time.getTime())/1000 < timeout;
} public int getTimeout()
{
return timeout;
} public void setTimeout(int timeout)
{
this.timeout = timeout;
} static public OnlineState getInstance()
{
if (instance == null)
{
instance = new OnlineState();
}
return instance;
} private OnlineState()
{
users = new HashMap();
timeout = 600;
} public class UserInfo
{
private int userId;
private int departmentId;
private String departmentName;
private String username;
private Date time; public int getUserId()
{
return userId;
} public int getDepartmentId()
{
return departmentId;
} public String getDepartmentName()
{
return departmentName;
} public String getUsername()
{
return username;
} public Date getTime()
{
return time;
}
public UserInfo(int userid, String username, int departmentId, String departmentName, Date time)
{
this.userId = userid;
this.username = username;
this.departmentId = departmentId;
this.departmentName = departmentName;
this.time = time;
}
}
}
在HashMap中放了userId和userInfo的组合,用OnlineState就可以得到所有的情况.
我对这个bean还不太理解,可能还包括一些bean的知识。如下:
1。OnlineState类中为什么又直接内含了UserInfo类,可不可以或者是不是应该把UserInfo直接写出来呢?
2。 UserInfo类中最下面的代码: public UserInfo(int userid, String username, int departmentId, String departmentName, Date time) {... }
我好像没见过这种写法呀
2。接着,这句代码:UserInfo user = (UserInfo)((Map.Entry)it.next()).getValue();
实例化UserInfo类时怎么实例化成这样了?不大懂
3。Map直接可以用吗?是什么关键字?
4。最后,能从数据流程上给我写一下吗?比方说,现在就有4用户:user1,user2,user3,user4,分别对应的名字是name1,name2,name3,name4,怎么样就利用HashMap,getOnlineUserInfos()方法中的Iterator 、Map返回了Object[] ?(代码:if((System.currentTimeMillis() - user.getTime().getTime())/1000 < timeout我懂,不用解释了))多谢,还问了这么多问题,分却比较少啊
======>一般放在内部的类只是给自己用的,内部的类可以存取私有的变量. 你这种情况有点不符. 当然可以写在外部.
2。 UserInfo类中最下面的代码: public UserInfo(int userid, String username, int departmentId, String departmentName, Date time) {... }
我好像没见过这种写法呀
=======>这是最普通的构造函数啊. 眼花了吧. :-)
2。接着,这句代码:UserInfo user = (UserInfo)((Map.Entry)it.next()).getValue();
实例化UserInfo类时怎么实例化成这样了?不大懂
=======>分开写就是
Object obj = it.next();
Map.Entry en = (Map.Entry)obj;
Object obj1 = en.getValue();
UserInfo user= (UserInfo)obj1;
3。Map直接可以用吗?是什么关键字?
=====> 不行. Map只是一个接口. 不懂你的第二问.
4。最后,能从数据流程上给我写一下吗?比方说,现在就有4用户:user1,user2,user3,user4,分别对应的名字是name1,name2,name3,name4,怎么样就利用HashMap,getOnlineUserInfos()方法中的Iterator 、Map返回了Object[] ?(代码:if((System.currentTimeMillis() - user.getTime().getTime())/1000 < timeout我懂,不用解释了))
=====> 所有的数据都放到了一张表中:
1----(USER1,NAME1)
...
4----(USER4,NAME4)
Iterator it = users.entrySet().iterator();中users.entrySet()得到一个集合,内有(1,2,3,4), iterator()是用来遍历的(不知中文是否翻译成这样).再结合上面的解释,就不难理解了.
我明白了
主要是我对java还没有非常完整的学习,也就是直接针对j2ee项目中用到的东东学了学,所以对这些很程序的东东(姑且这么叫)我就不很了解了,
现在买了《thinking in java2》和〈effective java〉开始苦读呀,java还是很深的
不知大吓能够提点什么建议呀
分绝对给