public class SetUtil { public static <T> Set<T> and(Set<T> a, Set<T> b) { Set<T> c = new HashSet<T>(); // c.addAll(SetUtil.or(a, b)); // c.removeAll(SetUtil.xor(a, b)); c.addAll(a); c.retainAll(b); return c; } public static <T> Set<T> or(Set<T> a, Set<T> b) { Set<T> c = new HashSet<T>(); c.addAll(a); c.addAll(b); return c; } public static <T> Set<T> xor(Set<T> a, Set<T> b) { Set<T> a_minus_b = new HashSet<T>(); a_minus_b.addAll(a); a_minus_b.removeAll(b); Set<T> b_minus_a = new HashSet<T>(); b_minus_a.addAll(b); b_minus_a.removeAll(a); Set<T> c = new HashSet<T>(); c.addAll(a_minus_b); c.addAll(b_minus_a); return c; } }
2009-08-30
Set :: binary operations
Everybody should have these. It's just a drag to rewrite it time and time again.
Subscribe to:
Post Comments (Atom)
Why would your and method not just be
ReplyDeleteSet c = new HashSet();
c.addAll(a);
c.retainAll(b);
return c;
?
Indeed. Got a little carried away there.
ReplyDelete