gpt4 book ai didi

java 从哈希集中删除元素会破坏 while 循环并留下 nul 错误

转载 作者:行者123 更新时间:2023-12-01 12:02:38 24 4
gpt4 key购买 nike

我有一个房间对象的哈希集,这些房间对象是根据用户输入在另一个函数中创建的,并添加到哈希集中。在这里,我们迭代哈希集中的房间,然后迭代用户并根据房间中有多少人增加房间数。除非需要删除房间,否则这一切正常。log.error(ex.getMessage());留下一个空错误,并且它不会继续迭代其余元素,并且字符串生成器留空。下次 sendroomlist 触发时,虽然它会将房间及其计数添加到字符串生成器中,但我需要它一次性完成所有这些操作,请提供任何帮助,让我走上正确的轨道

这是我的哈希集

 private Set<Room> rooms = Collections.synchronizedSet(new HashSet<Room>());

如果您需要查看我将房间添加到房间哈希集 lmk 的位置,这就是我遇到的问题

      private void sendRoomList()
{
StringBuilder sb = new StringBuilder();
String strRoom;
int roomCount = 0;
int spaghetticount = 0;
// Room objRoom;
try
{
synchronized (rooms)
{
// {
// Iterator<Room> iterRoom = rooms.iterator();
// while (iterRoom.hasNext())
// {
// Room s = (Room) iterRoom.next();
// if ( (s.getName().toString().equalsIgnoreCase(roomName)) )
// { return true;

// }
//Iterator<String> iterRoom = rooms.iterator();
Iterator<Room> iterRoom = rooms.iterator();

while (iterRoom.hasNext())
{
//Room s = (Room) iterRoom.next();
Room objRoom = (Room) iterRoom.next();
strRoom = (String) objRoom.getName();
synchronized (sessions)
{
roomCount = 0;
Iterator<IoSession> iterSessions = sessions.iterator();

while (iterSessions.hasNext())
{
IoSession s = (IoSession) iterSessions.next();
if (s.isConnected())
{
if (s.getAttribute("room").toString().equalsIgnoreCase(strRoom))
{

roomCount++;
}
}
}
}
if (roomCount <= 0 && strRoom != defaultRoom)
{
synchronized (rooms)
{
rooms.remove(objRoom);
}
}
else
{
sb.append(strRoom + "|" + roomCount + "~");
}
}
}
}
catch (Exception ex)
{
log.error(ex.getMessage());
}
broadcastRoomList(sb.toString());
}

最佳答案

使用 iterRoom.remove() 而不是 rooms.remove(objRoom)。

关于java 从哈希集中删除元素会破坏 while 循环并留下 nul 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27879703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com