Advertisement
Guest User

Untitled

a guest
Mar 28th, 2015
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.48 KB | None | 0 0
  1. import java.util.*;
  2.  
  3. class IntSparseSet extends AbstractSet<Integer> {
  4.     private int[] sparse, dense;
  5.     private int shift, n = 0;
  6.  
  7.     private class SetIterator implements Iterator<Integer> {
  8.         private int it = -1;
  9.  
  10.         public boolean hasNext() {
  11.             return it < n - 1;
  12.         }
  13.  
  14.         public Integer next() {
  15.             return dense[++it] + shift;
  16.         }
  17.  
  18.         public void remove() {
  19.             IntSparseSet.this.remove(dense[it] + shift);
  20.         }
  21.     }
  22.  
  23.     public IntSparseSet(int a, int b) {
  24.         shift = a; sparse = new int[b - a]; dense = new int[b - a];
  25.     }
  26.  
  27.     public boolean add(Integer x) {
  28.         if (x - shift >= 0 && x - shift < sparse.length && !contains(x)) {
  29.             sparse[x - shift] = n; dense[n++] = x - shift;
  30.             return true;
  31.         }
  32.         return false;
  33.     }
  34.  
  35.     public boolean contains(Integer x) {
  36.         return sparse[x - shift] < n && dense[sparse[x - shift]] == x - shift;
  37.     }
  38.  
  39.     public int size() {
  40.         return n;
  41.     }
  42.  
  43.     public boolean remove(Object o) {
  44.         Integer x = (Integer) o;
  45.         if (x - shift >= 0 && x - shift < sparse.length && contains(x)) {
  46.             dense[sparse[x - shift]] = dense[--n];
  47.             sparse[dense[n]] = sparse[x - shift];
  48.             return true;
  49.         }
  50.         return false;
  51.     }
  52.  
  53.     public void clear() {
  54.         n = 0;
  55.     }
  56.  
  57.     public Iterator<Integer> iterator() {
  58.         return new SetIterator();
  59.     }
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement