是否存在用于集合操作的API,例如Union,交集,差异,笛卡尔积,从集合到另一个集合的函数,域限制和这些函数的范围限制,....在Java中?
请评论(运营)和业绩的覆盖范围.
谢谢
igo*_*rdc 23
是的,java Set类.
通过Java SE教程:
s1.containsAll(s2)- 如果s2是s1的子集,则返回true.(如果set 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
Har*_*Joy 13
我不知道任何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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9236 次 |
| 最近记录: |