2016-05-03 8 views
-1

2つのリスト間の類似点を表示する次の例が見つかりました。実際には、両方のリストに同じ値がある場合はtrue、そうでない場合はfalseを返すだけです。たとえば、次のコードはfalseを返します。2つのリストを比較するブール値を返す

public static void main(String[] args) { 
    List<Integer> list1 = Arrays.asList(1, 2, 3, 4); 
    List<Integer> list2 = Arrays.asList(1, 2); 

    Set<Integer> similar = new HashSet<Integer>(list1); 
    similar.retainAll(list2); 
    System.out.println("Similar " + similar); 
} 
+2

_return_はどういう意味ですか?これを 'boolean'の戻り値の型を持つメソッドに移動し、' return'を比較結果に対応する 'boolean'の値にしますか?あなたがそれをやり遂げるのを妨げるのは何ですか? –

+0

また、注文、複製品などを検討していますか? –

+0

たぶん、あなたが望む: 'System.out.println(" Similar "+ Similar.retainAll(list2));' – brso05

答えて

1

あなたはList.equalsを使用する必要があります。

public class HelloWorld{ 

    public static void main(String[] args) { 
    List<Integer> list1 = Arrays.asList(1, 2, 3, 4); 
    List<Integer> list2 = Arrays.asList(1, 2); 
    boolean test = list1.equals(list2); 
    System.out.println("Similar " + test); 
} 
} 

ので、Listからequalsは二つのリストがフルで、同じ大きさとその中と同じ位置に同じ値で等しいかどうかをチェックします。 HashSetで行ったことは、あるリストが他のリストのサブセットであるかどうかだけをチェックします。しかし、list1list2のサブセットであり、list2がサブセットlist1である場合、それらは(数学的に)等しい。しかし、List.equals()が高速で、2つのSetsを作成してサブセット操作を行う必要がありません。

しかし、{1,2,3}{1,2,3}と等しくなくList.equalsの点で{1,3,2}です。あなたが{1,2,3}にしたい場合は、あなたはSetsでそれを行う{1,3,2}へと{1,3,2,1,3}に等しいこと:

public class HelloWorld{ 

    public static void main(String[] args) { 
    List<Integer> list1 = Arrays.asList(1, 2, 3, 4); 
    List<Integer> list2 = Arrays.asList(1, 2); 

    Set<Integer> similar2 = new HashSet<Integer>(list2); 
    Set<Integer> similar1 = new HashSet<Integer>(list1); 
    boolean test = similar1.equals(similar2); 
    System.out.println("Similar " + test); 
} 
} 

List.equalsその後、別の作品Set.equalssimilar1内のすべての要素は、(反復によって)similar2に存在する場合、それはチェックしているので、それはdoesnの注文について気にしない。 (これを指摘してくれてありがとう@ brso05)。

+0

ありがとうございました。この例はtrueを出力しますが、2つのリストが同じでないためfalseを出力します。正確に両方のリストが同じサイズと同様の数字を持っているときに真に戻ってほしいです。私はちょっと固まっています – Jacki

+0

ありがとうございました。 – Jacki

+0

が私の答えを更新しました。 –

関連する問題