用于 Java 中集合操作的 API?[已关闭]

2022-09-03 09:04:11

是否有用于集合操作的API,例如联合,交集,差分,笛卡尔积,从集合到另一个集合的函数,这些函数的域限制和范围限制,....在爪哇?

请评论(业务)的覆盖范围和绩效。

谢谢


答案 1

是的,java类。Set

通过 Java SE 教程:

s1.containsAll(s2)— 如果 s2 是 s1 的子集,则返回 true。(如果集合 s1 包含 s2 中的所有元素,则 s2 是 s1 的子集。

s1.addAll(s2)— 将 s1 转换为 s1 和 s2 的并集。(两个集合的并集是包含任一集合中包含的所有元素的集合。

s1.retainAll(s2)— 将 s1 转换为 s1 和 s2 的交集。(两个集合的交集是仅包含两个集合共有的元素的集合。

s1.removeAll(s2)— 将 s1 转换为 s1 和 s2 的(非对称)集合差。(例如,s1 减去 s2 的集合差值是包含 s1 中找到的所有元素的集合,但不包含 s2 中找到的所有元素。

http://download.oracle.com/javase/tutorial/collections/interfaces/set.html


答案 2

我不知道任何API,但使用以下方法在Set上做这样的事情。

public static <T> Set<T> union(Set<T> setA, Set<T> setB) {
    Set<T> tmp = new TreeSet<T>(setA);
    tmp.addAll(setB);
    return tmp;
  }

  public static <T> Set<T> intersection(Set<T> setA, Set<T> setB) {
    Set<T> tmp = new TreeSet<T>();
    for (T x : setA)
      if (setB.contains(x))
        tmp.add(x);
    return tmp;
  }

  public static <T> Set<T> difference(Set<T> setA, Set<T> setB) {
    Set<T> tmp = new TreeSet<T>(setA);
    tmp.removeAll(setB);
    return tmp;
  }

  public static <T> Set<T> symDifference(Set<T> setA, Set<T> setB) {
    Set<T> tmpA;
    Set<T> tmpB;

    tmpA = union(setA, setB);
    tmpB = intersection(setA, setB);
    return difference(tmpA, tmpB);
  }

  public static <T> boolean isSubset(Set<T> setA, Set<T> setB) {
    return setB.containsAll(setA);
  }

  public static <T> boolean isSuperset(Set<T> setA, Set<T> setB) {
    return setA.containsAll(setB);
  }

参考:集合运算:并集、交集、差分、对称差分、是子集、是超集


推荐