Java中集合操作的API?

Java中集合操作的API?,java,api,set,Java,Api,Set,是否有一个API用于集合操作,如并集、交集、差分、笛卡尔积、从一个集合到另一个集合的函数、这些函数的域限制和范围限制等。。。。在爪哇 请评论(运营)范围和绩效 谢谢是的,java集合类 通过Java SE教程: s1.containsAll(s2)-如果s2是s1的子集,则返回true。(s2是一个 如果集合s1包含s2中的所有元素,则为s1的子集。) s1.addAll(s2)-将s1转换为s1和s2的并集。(修订) 两个集合的并集是包含所有元素的集合 在任何一组中。) s1.retainAl

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

请评论(运营)范围和绩效


谢谢

是的,java
集合

通过Java SE教程:

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

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

s1.retainAll(s2)
-将s1转换为s1和s2的交点。 (两个集合的交集是仅包含元素的集合 这两套都通用。)

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

该类的API中没有这些调用,但是您可以将诸如
removeAll()
retainal()
addAll()
之类的操作组合起来进行并集、交集和差分。我不知道你说的域名限制是什么意思。


您可以使用retainal、removeAll和addAll方法“模拟”交叉点、差异、域限制,这些方法接受任何集合作为输入参数。

我不知道任何API,但使用以下方法在上执行这些操作

publicstaticset并集(Set-setA,Set-setB){
设置tmp=新树集(setA);
tmp.addAll(setB);
返回tmp;
}
公共静态集合交叉点(集合集合集合A、集合集合立根){
设置tmp=newtreeset();
对于(tx:setA)
如果(立根包含(x))
tmp.add(x);
返回tmp;
}
公共静态设置差异(设置setA、设置setB){
设置tmp=新树集(setA);
tmp.removeAll(立根);
返回tmp;
}
公共静态设置符号差(设置setA、设置setB){
设置tmpA;
设置tmpB;
tmpA=联合(setA,setB);
tmpB=交叉口(setA、立根);
返回差(tmpA、tmpB);
}
公共静态布尔ISUBSET(集合setA,集合setB){
返回收进容器(setA);
}
公共静态布尔isSuperset(集合setA,集合setB){
返回setA.containsAll(setB);
}

参考资料:

谷歌番石榴库也有一系列有用的方法(如集合并集和差分法)

示例(来自上面链接的页面):

Set wordsWithPrimeLength=ImmutableSet.of(“一”、“二”、“三”、“六”、“七”、“八”);
集合素数=不可变集合(二、三、五、七);
SetView交叉点=集合。交叉点(素数,字的素数长度);//包含“二”、“三”、“七”
//我可以直接使用交叉点作为一个集合,但如果我经常使用它,复制它会更有效。
返回intersection.immutableCopy();

谢谢。我还谈到了集合函数的操作。该库已被弃用,取而代之的是Guava:
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);
  }
Set<String> wordsWithPrimeLength = ImmutableSet.of("one", "two", "three", "six", "seven", "eight");
Set<String> primes = ImmutableSet.of("two", "three", "five", "seven");

SetView<String> intersection = Sets.intersection(primes, wordsWithPrimeLength); // contains "two", "three", "seven"
// I can use intersection as a Set directly, but copying it can be more efficient if I use it a lot.
return intersection.immutableCopy();