椰Ye 2023-04-08 10:20 采纳率: 63.2%
浏览 15
已结题

迭代器原理hasNext方法

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();
            }
        }
    }

进入这个函数之后执行不了循环语句。

img

尝试了解了一下迭代器原理,it.hasNext()方法不涉及指针的移动,只判断是判断是否还有下一元素。这样子看来我认为是有下一个元素的,但是没有。
  • 写回答

2条回答 默认 最新

  • Mini厂程序员 2023-04-08 10:49
    关注

    看下这个map怎么存的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月17日
  • 已采纳回答 4月9日
  • 创建了问题 4月8日

悬赏问题

  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 UE5#if WITH_EDITOR导致打包的功能不可用
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?
  • ¥15 电磁场的matlab仿真
  • ¥15 mars2d在vue3中的引入问题
  • ¥50 h5唤醒支付宝并跳转至向小荷包转账界面
  • ¥15 算法题:数的划分,用记忆化DFS做WA求调