Java – 2つのセットを比較する方法
Javaでは、2つの `java.util.Set`を比較する準備完了APIはありません
1.解決策
私の実装は `check size containsAll`です:
SetUtils.java
package com.mkyong.core.utils; import java.util.Set; public class SetUtils { public static boolean equals(Set<?> set1, Set<?> set2){ if(set1 == null || set2 ==null){ return false; } if(set1.size()!=set2.size()){ return false; } return set1.containsAll(set2); } }
ユニットテスト
上記の `SetUtils.java`のユニットテスト
TestSetUtils.java
package com.mkyong.core.utils; import org.junit.Test; import java.util.HashSet; import java.util.Set; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; public class TestSetUtils { @Test public void test1() { Set<String> test1 = new HashSet<>(); test1.add("a"); test1.add("b"); Set<String> test2 = new HashSet<>(); test2.add("b"); test2.add("c"); assertThat(SetUtils.equals(test1, test2), is(false)); } @Test public void test2() { Set<String> test1 = new HashSet<>(); test1.add("a"); test1.add("b"); Set<String> test2 = new HashSet<>(); test2.add("a"); test2.add("b"); test2.add("c"); assertThat(SetUtils.equals(test1, test2), is(false)); } @Test public void test3() { Set<String> test1 = new HashSet<>(); test1.add("a"); test1.add("b"); test1.add("c"); Set<String> test2 = new HashSet<>(); test2.add("a"); test2.add("b"); assertThat(SetUtils.equals(test1, test2), is(false)); } //set ignore sequence @Test public void test4() { Set<String> test1 = new HashSet<>(); test1.add("a"); test1.add("b"); Set<String> test2 = new HashSet<>(); test2.add("b"); test2.add("a"); assertThat(SetUtils.equals(test1, test2), is(true)); } @Test public void test5() { Set<String> test1 = new HashSet<>(); test1.add("a"); Set<String> test2 = new HashSet<>(); test2.add("a"); assertThat(SetUtils.equals(test1, test2), is(true)); } }
それを実行すると、すべての単体テストが渡されます。