第35回 集合
今回のテーマは「集合」です。
Javaにおいて、数学における「集合」の概念を表すものは、Setインターフェースです。 SetインターフェースはCollectionインターフェースから継承した以外のメソッドを持ちませんが、重複要素を許さないという制約があります。
それでは和集合や差集合の作成といった集合に関する操作を実際にやってみましょう。
import java.util.Arrays; import java.util.LinkedHashSet; import java.util.Set; public class Main { public static void main(String[] args) { String[] abcde = { "a", "b", "c", "d", "e" }; String[] cdefg = { "c", "d", "e", "f", "g" }; Set<String> abcdeSet = new LinkedHashSet<String>(Arrays.asList(abcde)); System.out.println("集合abcdeSet:" + abcdeSet); Set<String> cdefgSet = new LinkedHashSet<String>(Arrays.asList(cdefg)); System.out.println("集合cdefgSet:" + cdefgSet); // 和集合を作成 Set<String> abcdefgSet = new LinkedHashSet<String>(abcdeSet); abcdefgSet.addAll(cdefgSet); System.out.println("abcdeSetとcdefgSetの和集合abcdefgSet:" + abcdefgSet); // 差集合を作成 Set<String> abSet = new LinkedHashSet<String>(abcdeSet); abSet.removeAll(cdefgSet); System.out.println("abcdeSetとcdefgSetの差集合abSet:" + abSet); // 積集合を作成 Set<String> cdeSet = new LinkedHashSet<String>(abcdeSet); cdeSet.retainAll(cdefgSet); System.out.println("abcdeSetとcdefgSetの積集合cdeSet:" + cdeSet); // 対称差集合を作成 Set<String> abfgSet = new LinkedHashSet<String>(abcdefgSet); abfgSet.removeAll(cdeSet); System.out.println("abcdeSetとcdefgSetの対称差集合abfgSet:" + abfgSet); // 部分集合の判定 System.out.println("abcdeSetはcdefgSetの部分集合である:" + cdefgSet.containsAll(abcdeSet)); System.out.println("abcdeSetはabcdefgSetの部分集合である:" + abcdefgSet.containsAll(abcdeSet)); } }
いろいろな集合が簡単に作れましたね。
集合を扱うときは、一括操作のメソッドを使うと非常に楽になります。