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