ConcurrentHashMap のキーセットを反復処理するために for ループを使用しています。ただし、ときどき (予期せず) 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 の配列要素よりも大きいのはどうしてでしょうか? この問題を修正するにはどうすればよいですか? あなたの洞察に感謝します。