我正在使用 for 循环遍历 ConcurrentHashMap 的键集。但是,有时(不可预测)它会因 ArrayIndexOutOfBoundsException 而崩溃。这是我正在使用的代码:
net_keys = MonitorService.net_list.keySet().toArray(net_keys);
net_count = net_keys.length;
for (net_count_iterator = 0; net_count_iterator < net_count; net_count_iterator++) {
ap_iterator = MonitorService.net_list.get(net_keys[net_count_iterator]);
if (ap_iterator.ssid.contains(search_ssid)) {
aps_temp.add(ap_iterator);
}
}
net_keys 是 String[],ap_iterator 是临时对象,net_count 是 int,MonitorService.net_list 是 ConcurrentHashMap。net_list 可能包含数千个键/值对,这些键/值对在此迭代发生时由不同的线程添加(但从未从中删除),因此我的问题可能与并发性有关。我特别避免使用增强的 for 循环来避免对象分配(特别是垃圾收集器清理它们所需的时间)。我对专家的问题是:net_keys.length 怎么会大于 net_keys 中的数组元素?我能做些什么来纠正这个问题?感谢您的见解。