JAVAの2つの集合が等しいかどうかをすばやく比較

2292 ワード

いくつかの方法があります.
1)順序を気にせず内容が同じであれば等しいと考える場合:
public > boolean isEquals(List list1, List list2){     
    if (list1 == null && list2 == null) {
        return true;
    }
    //Only one of them is null
    else if(list1 == null || list2 == null) {
        return false;
    }
    else if(list1.size() != list2.size()) {
        return false; 
    }
     
    //copying to avoid rearranging original lists
    list1 = new ArrayList(list1); 
    list2 = new ArrayList(list2);   
  
    Collections.sort(list1);
    Collections.sort(list2);      
     
    return list1.equals(list2);
}

LISTに重複する要素がない場合は、次のことができます.
public > boolean isEquals(List list1, List list2){     
    if (list1 == null && list2 == null) {
        return true;
    }
    //Only one of them is null
    else if(list1 == null || list2 == null) {
        return false;
    }
    else if(list1.size() != list2.size()) {
        return false; 
    }
  
    Set set1 = new TreeSet<>(list1);
    Set set2 = new TreeSet<>(list2);
     
    return set1.equals(set2);
}

ただし、繰り返しがある場合は、次のような方法ではいけません.  List list1 = Arrays.asList( 1 , 2 , 3 , 3 ); List list2 = Arrays.asList( 3 , 1 , 2 , 2 ); System.out.println(list1.isEquals(list2)); , , , apache common :   List list1 = Arrays.asList( 1 , 2 , 3 , 3 ); List list2 = Arrays.asList( 3 , 1 , 3 , 2 );     System.out.println(CollectionUtils.isEqualCollection(list1, list2)); //true