Skip to content

Instantly share code, notes, and snippets.

@oowekyala
Created July 30, 2021 21:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save oowekyala/1a5d387eb5d035fc6c52921076690654 to your computer and use it in GitHub Desktop.
Save oowekyala/1a5d387eb5d035fc6c52921076690654 to your computer and use it in GitHub Desktop.
An unmodifiable set of 2 elements, with predictable iteration order.
import java.util.*;
/**
* A set of 2 elements. Unfortunately, {@link Set#of(Object, Object)}
* does not guarantee stable iteration order across JVM
* instances.
*/
public final class Set2<T> extends AbstractSet<T> {
private final T e0;
private final T e1;
Set2(T e0, T e1) {
this.e0 = Objects.requireNonNull(e0);
this.e1 = Objects.requireNonNull(e1);
}
@Override
public Iterator<T> iterator() {
return new Iterator<T>() {
int idx = 0;
@Override
public boolean hasNext() {
return idx < 2;
}
@Override
public T next() {
switch (idx++) {
case 0: return e0;
case 1: return e1;
default:
throw new NoSuchElementException();
}
}
};
}
@Override
public int size() {
return 2;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment