问题
That is, if I had two or more sets, and I wanted to return a new set containing either:
- All of the elements each set has in common (AND).
- All of the elements total of each set (OR).
- All of the elements unique to each set. (XOR).
Is there an easy, pre-existing way to do that?
Edit: That's the wrong terminology, isn't it?
回答1:
Assuming 2 Set objects a and b
AND(intersection of two sets)
a.retainAll(b);
OR(union of two sets)
a.addAll(b);
XOR either roll your own loop:
foreach item
if(a.contains(item) and !b.contains(item) || (!a.contains(item) and b.contains(item)))
c.add(item)
or do this:
c.addAll(a);
c.addAll(b);
a.retainAll(b); //a now has the intersection of a and b
c.removeAll(a);
See the Set documentation and this page. For more.
回答2:
You can use the Google-Collections Sets class which has the methods intersection() union() and symmetricDifference().
Sets.intersection(set1, set2);
Sets.union(set1, set2);
SetView view = Sets.intersection(Sets.union(set1, set2), set3);
Set result = view.copyInto(new HashSet());
回答3:
@Milhous said:
check out the sets api. if you use addAll you can get or. If you use retainAll you can get the and. I dont know about the Xor.
It seems like if you had sets s1
and s2
you could do this to get XOR:
- copy the set
s1
tos3
s1.removeAll(s2);
(s1 now contains all elements not in s2)s2.removeAll(s3);
(s2 now contains all elements not in s3 = the old s1)s1.addAll(s2);
(s1 now contains the union of the above two sets)
回答4:
check out the sets api. if you use addAll you can get or. If you use retainAll you can get the and. I dont know about the Xor.
Edit: from the set documentation.
...If the specified collection is also a set, the addAll operation effectively modifies this set so that its value is the union of the two sets.
....If the specified collection is also a set, this operation effectively modifies this set so that its value is the intersection of the two sets.
回答5:
I'm pretty sure that Jakarta Common Collections API supports unions, intersections etc.
I'd be amazed if the Google Collections API didn't as well.
来源:https://stackoverflow.com/questions/393968/java-is-there-an-easy-quick-way-to-and-or-or-xor-together-sets