在Java中,没有现成的make API可以比较两个java.util.Set
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);
}
}
2.单元测试
上述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));
}
}
运行它,所有单元测试都将通过。