如何在列表中存储客户端

Lol*_*ans 5 java sockets networking network-programming arraylist

我正在运行一个服务器,我有一个类型为Client的arraylist当客户端通过ServerSocket.accept()连接时,我将新的Socket传递给arraylists构造函数.这是构造函数中的所有内容

this.add(new Client(Socket client));
Run Code Online (Sandbox Code Playgroud)

我的问题是当客户端断开连接时,它会关闭Socket,但它不会删除它在arraylist中的位置,并将所有内容都移到一个位置.所以arraylist不断变大.

我可以做什么/用来解决这个问题?

有时我会运行将在所有客户端上执行的命令,这就是我将客户端存储在arraylist中的原因.

是否有更好的替代方法在服务器中存储客户端?

更新1

课程处于起步阶段.很少实施.到目前为止,答案中建议的HashMap选项最适合我.谢谢您的回复

Dan*_*elo 3

有趣的问题。

您应该在此处使用哈希映射。添加带有对象作为值的客户端并使用一些键。每当您断开连接时,请将其从地图中删除。

这是一个好问题,我能问一下关键是什么吗?可能是对象引用(取决于您的选择)或相对于客户端对象而言唯一的任何东西(必须有一些东西,如果没有,您可以轻松生成它)。

Map<Integer,Client> clientMap = new HashMap<Integer,Client>();
Run Code Online (Sandbox Code Playgroud)