Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- class IntSparseSet extends AbstractSet<Integer> {
- private int[] sparse, dense;
- private int shift, n = 0;
- private class SetIterator implements Iterator<Integer> {
- private int it = -1;
- public boolean hasNext() {
- return it < n - 1;
- }
- public Integer next() {
- return dense[++it] + shift;
- }
- public void remove() {
- IntSparseSet.this.remove(dense[it] + shift);
- }
- }
- public IntSparseSet(int a, int b) {
- shift = a; sparse = new int[b - a]; dense = new int[b - a];
- }
- public boolean add(Integer x) {
- if (x - shift >= 0 && x - shift < sparse.length && !contains(x)) {
- sparse[x - shift] = n; dense[n++] = x - shift;
- return true;
- }
- return false;
- }
- public boolean contains(Integer x) {
- return sparse[x - shift] < n && dense[sparse[x - shift]] == x - shift;
- }
- public int size() {
- return n;
- }
- public boolean remove(Object o) {
- Integer x = (Integer) o;
- if (x - shift >= 0 && x - shift < sparse.length && contains(x)) {
- dense[sparse[x - shift]] = dense[--n];
- sparse[dense[n]] = sparse[x - shift];
- return true;
- }
- return false;
- }
- public void clear() {
- n = 0;
- }
- public Iterator<Integer> iterator() {
- return new SetIterator();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement