2013-09-22 48 views
14

Có cách nào để xác định liệu một ArrayList có chứa bất kỳ phần tử nào của một ArrayList khác không?Làm cách nào để kiểm tra xem ArrayList có chứa bất kỳ phần tử nào của một ArrayList khác không?

Như thế này:

list1.contains(any element of list2) 

là lặp qua tất cả các yếu tố của list2 và kiểm tra các yếu tố từng người một con đường duy nhất?

+0

Nếu 'X chứa một phần tử của Y' là usecase chính cho bộ sưu tập của bạn, bạn có thể muốn xem xét sử dụng Set để thay thế. – maasg

Trả lời

7

Mặc dù không đánh giá cao hiệu quả, đây là ngắn gọn và sử dụng các API:

if (!new HashSet<T>(list1).retainAll(list2).isEmpty()) 
    // at least one element is shared 
3

sao bạn không thử như thế này: -

List1.retainAll(List2) 

như thế này: -

int a[] = {30, 100, 40, 20, 80}; 
int b[] = {100, 40, 120, 30, 230, 10, 80}; 
List<Integer> 1ist1= Arrays.asList(a); 
List<Integer> 1ist2= Arrays.asList(b); 
1ist1.retainsAll(1ist2); 
1

Nếu bạn không bị hạn chế trong việc sử dụng thư viện của bên thứ ba, Apache commons ListUtils phù hợp cho các hoạt động danh sách chung.

Trong trường hợp này bạn có thể sử dụng intersection phương pháp

if(!ListUtils.intersection(list1,list2).isEmpty()) { 
    // list1 & list2 have at least one element in common 
} 
2
if(!CollectionUtils.intersection(arrayList1, arrayList2).isEmpty()){ 
     // has common 
} 
else{ 
    //no common 
} 

sử dụng org.apache.commons.collections

41

xem xét như sau: Java SE 7 documentation: java.util.Collections.disjoint

Phương pháp "tách bạch" có hai bộ sưu tập (listA và listB chẳng hạn) làm tham số và trả về "tr ue "nếu chúng không có điểm chung; do đó, nếu chúng có bất kỳ phần tử chung nào, nó sẽ trả về false.

Một kiểm tra đơn giản như thế này là tất cả những gì cần thiết:

if (!Collections.disjoint(listA, listB)) 
{ 
    //List "listA" contains elements included in list "listB" 
} 
+0

phương pháp rất hữu ích 1.7 trở đi ...: D – ArifMustafa