1. ホーム
  2. java

[解決済み] Java ArrayList - 2つのリストが等しいかどうかを判断するにはどうすればよいですか?

2022-04-29 01:41:10

質問

私は2つの ArrayList タイプの Answer (自作クラス)です。

2つのリストを比較して、同じ内容が含まれているかどうかを、順序を気にせずに確認したいと思います。

//These should be equal.
ArrayList<String> listA = {"a", "b", "c"}
ArrayList<String> listB = {"b", "c", "a"}

List.equals は、2つのリストが同じサイズ、内容、要素の順序を含む場合、等しいと述べています。私は同じことをしたいのですが、順序は重要ではありません。

これを簡単に行う方法はありますか?それとも、ネストされたforループを行い、手動で両方のリストの各インデックスをチェックする必要があるのでしょうか?

注: ArrayList を他のタイプのリストに変更する必要があります。

どのように解決するのですか?

両方のリストを並べ替えるには Collections.sort() を実行し、equalsメソッドを使用します。もし同じ長さでなければ、等しくないということになり、ソートしてからequalsを使います。例えば、2つの文字列のリストがあった場合、次のようになります。

public  boolean equalLists(List<String> one, List<String> two){     
    if (one == null && two == null){
        return true;
    }

    if((one == null && two != null) 
      || one != null && two == null
      || one.size() != two.size()){
        return false;
    }

    //to avoid messing the order of the lists we will use a copy
    //as noted in comments by A. R. S.
    one = new ArrayList<String>(one); 
    two = new ArrayList<String>(two);   

    Collections.sort(one);
    Collections.sort(two);      
    return one.equals(two);
}