Java: Is there an easy, quick way to AND, OR, or XOR together sets?

谁说胖子不能爱 提交于 2019-11-28 09:02:42

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.

axelclk

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());

@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:

  1. copy the set s1 to s3
  2. s1.removeAll(s2); (s1 now contains all elements not in s2)
  3. s2.removeAll(s3); (s2 now contains all elements not in s3 = the old s1)
  4. s1.addAll(s2); (s1 now contains the union of the above two sets)

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.

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.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!