For循环使ArrayIndexOutOfBoundsException ...有时?

时间:2013-09-23 00:16:00

标签: java android arrays

我正在使用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中的数组元素?我该怎么做才能解决这个问题?感谢您的见解。

2 个答案:

答案 0 :(得分:0)

我的猜测是net_list.get引发了异常,而不是net_keys[net_count_iterator]。我会尝试在循环中将第一行分成两行,并在控制台中写入以确认问题出在哪里。像.-

之类的东西
int key = net_keys[net_count_iterator];
System.out.println("*** Got key " + key);
ap_iterator = MonitorService.net_list.get(key);
System.out.println("*** Got iterator " + ap_iterator);

PS:考虑使用 camelCase 作为变量名称,它更多是 java friendly :)

答案 1 :(得分:0)

你能试试下面的代码吗?我只是在for循环中添加- 1

net_keys = MonitorService.net_list.keySet().toArray(net_keys); 
net_count = net_keys.length;

for (net_count_iterator = 0; net_count_iterator <= net_count - 1; 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);
    }
}