Java - 2つのセットを比較する方法

Java – 2つのセットを比較する方法

Javaには、2つのjava.util.Setを比較するための既製のAPIはありません。

1. 溶液

これが私の実装です。check size + containsAllを組み合わせてください:

SetUtils.java

package com.example.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.example.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 test1 = new HashSet<>();
        test1.add("a");
        test1.add("b");

        Set test2 = new HashSet<>();
        test2.add("b");
        test2.add("c");

        assertThat(SetUtils.equals(test1, test2), is(false));

    }

    @Test
    public void test2() {

        Set test1 = new HashSet<>();
        test1.add("a");
        test1.add("b");

        Set test2 = new HashSet<>();
        test2.add("a");
        test2.add("b");
        test2.add("c");

        assertThat(SetUtils.equals(test1, test2), is(false));

    }

    @Test
    public void test3() {

        Set test1 = new HashSet<>();
        test1.add("a");
        test1.add("b");
        test1.add("c");

        Set test2 = new HashSet<>();
        test2.add("a");
        test2.add("b");

        assertThat(SetUtils.equals(test1, test2), is(false));

    }

    //set ignore sequence
    @Test
    public void test4() {

        Set test1 = new HashSet<>();
        test1.add("a");
        test1.add("b");

        Set test2 = new HashSet<>();
        test2.add("b");
        test2.add("a");

        assertThat(SetUtils.equals(test1, test2), is(true));

    }

    @Test
    public void test5() {

        Set test1 = new HashSet<>();
        test1.add("a");

        Set test2 = new HashSet<>();
        test2.add("a");

        assertThat(SetUtils.equals(test1, test2), is(true));

    }

}

それを実行すると、すべての単体テストに合格します。

参考文献