2012-01-16 39 views

Trả lời

263

Sử dụng phương pháp retainAll() của Set:

Set<String> s1; 
Set<String> s2; 
s1.retainAll(s2); // s1 now contains only elements in both sets 

Nếu bạn muốn giữ các bộ, tạo ra một mới thiết lập để giữ giao lộ:

Set<String> intersection = new HashSet<String>(s1); // use the copy constructor 
intersection.retainAll(s2); 

Các javadoc của retainAll() nói chính xác những gì bạn muốn:

Chỉ giữ lại các phần tử trong bộ này được chứa trong bộ sưu tập được chỉ định (hoạt động tùy chọn). Nói cách khác, loại bỏ khỏi tập hợp này tất cả các phần tử của nó không được chứa trong bộ sưu tập được chỉ định. Nếu tập hợp được chỉ định cũng là một tập hợp, hoạt động này có hiệu quả sửa đổi tập hợp này sao cho giá trị của nó là giao lộ của hai bộ.

+0

Chỉ cần một lưu ý cho bất cứ ai muốn sử dụng retainAll trên một Bộ sưu tập, chẳng hạn như một danh sách với các yếu tố trùng lặp. Tùy thuộc vào nội dung của bộ sưu tập, bạn có thể ném một UnsupportedOperationException, và nó cũng sẽ không lọc tần số chính xác (nó giữ lại bất kỳ và tất cả các lần xuất hiện của một giá trị trong multiset trái, bất kể số lần nó xảy ra trong multiset bên phải). – Allison

30

Có có retainAll séc ra this

Set<Type> intersection = new HashSet<Type>(s1); 
intersection.retainAll(s2); 
Các vấn đề liên quan