Java迭代器使用
使用迭代器取出用户通信线程,但是为什么不进入呢。iterator.hasNext我认为在这里是true但是结果不是,不论登录几个用户都不进入循环。
//一个用户上线之后将上线信息通过UserThread发送到其他用户,更新在线好友列表
public void onlineNotice(String userID){
//得到在线用户线程
HashMap map= UserThreadsManage.map;
Iterator iterator=map.keySet().iterator();
System.out.println("here");
//遍历,更新每个在线用户的好友列表,把这次登录用户改为在线
while (iterator.hasNext()){
Message msg=new Message();
msg.setMsgType("onlineSet");
msg.setContent(userID);
String onlineUsers=iterator.next().toString(); //获取其他用户ID
System.out.println("开始迭代111");
msg.setUser(onlineUsers);
Socket socket = UserThreadsManage.getUserThreads(onlineUsers).getSocket();
try {
ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
out.writeObject(msg);
System.out.println("完成输出流111");
} catch (Exception e) {
e.printStackTrace();
}
}
}
进入这个函数之后执行不了循环语句。
尝试了解了一下迭代器原理,it.hasNext()方法不涉及指针的移动,只判断是判断是否还有下一元素。这样子看来我认为是有下一个元素的,但是没有。