我有一个两部分的问题。
我有:
private static ConcurrentHashMap<Integer, Servers> servers= null;
我后来填充。在方法getAllServers
中,我正在这样做:
public static synchronized ConcurrentHashMap<Integer, Server> getAllServers() {
ConcurrentHashMap<Integer, Server> toReturn = new ConcurrentHashMap<>();
for(Integer i = 0; i < servers.size(); i ++ ) {
Server s = servers.get(i);
if(s.isAlive()) {
s.incrementConns();
toReturn.put(i, s);
}
}
return toReturn;
}
问:修改s
会反映在 中servers
吗?
问:会toReturn
引用与中相同的服务器对象servers
吗?如果是这样,任何创建和修改getAllServers
返回映射的类是否会修改与 相同的对象servers
?
更新:@chrylis:Iterator
你指的是哪个?你能解释一下为什么 for 循环是一个坏主意吗?我也在其他领域使用它:
Iterator itr = servers.entrySet().iterator();
Map.Entry pair;
while(itr.hasNext()) {
pair = (Map.Entry)itr.next();
Server s= (Server) pair.getValue();
...
但我没有发现任何问题,因为我知道servers
将包含Integer
id 从 0 开始的服务器。当我在 for 循环中迭代它们时,顺序对我来说不是问题。