Vì vậy, nếu tôi cố gắng xóa các phần tử khỏi Java HashSet trong khi lặp lại, tôi nhận được ConcurrentModificationException. Cách tốt nhất để xóa tập hợp con của các phần tử khỏi HashSet như trong ví dụ sau là gì?Xóa các phần tử khỏi một HashSet trong khi Iterating
Set<Integer> set = new HashSet<Integer>();
for(int i = 0; i < 10; i++)
set.add(i);
// Throws ConcurrentModificationException
for(Integer element : set)
if(element % 2 == 0)
set.remove(element);
Dưới đây là một giải pháp, nhưng tôi không nghĩ rằng nó rất tao nhã:
Set<Integer> set = new HashSet<Integer>();
Collection<Integer> removeCandidates = new LinkedList<Integer>();
for(int i = 0; i < 10; i++)
set.add(i);
for(Integer element : set)
if(element % 2 == 0)
removeCandidates.add(element);
set.removeAll(removeCandidates);
Cảm ơn!
Tôi thích 'for' đến' while', nhưng mỗi cái lại là của riêng mình. –
Tôi cũng sử dụng 'for'. Tôi đã sử dụng 'while' để làm cho ví dụ rõ ràng hơn. –
Tôi perfer 'for' chủ yếu là do biến iterator sau đó được giới hạn trong phạm vi của vòng lặp. –