Advertisement
Guest User

Untitled

a guest
Apr 24th, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.60 KB | None | 0 0
  1. public class IntSparseSet extends AbstractSet<Integer> {
  2.     private int[] sparse;
  3.     private int[] dense;
  4.     private int n;
  5.     private int high, low;
  6.     public IntSparseSet(int low, int high) {
  7.         n=0;
  8.         this.high=high;
  9.         this.low=low;
  10.         dense=new int[high-low];
  11.         sparse=new int[high-low];
  12.         for (int i=0; i<high-low; i++) {
  13.             sparse[i]=-1;
  14.         }
  15.     }
  16.     @Override
  17.     public Iterator<Integer> iterator() {
  18.         return new Iterator<Integer>() {
  19.             private int index=0;
  20.             @Override
  21.             public boolean hasNext() {
  22.                 return index < n;
  23.             }
  24.             @Override
  25.             public Integer next() {
  26.                 return dense[index++];
  27.             }
  28.             @Override
  29.             public void remove() {
  30.                 IntSparseSet.this.remove(dense[index-1]);
  31.             }
  32.         };
  33.     }
  34.     @Override
  35.     public int size() {
  36.         return n;
  37.     }
  38.     @Override
  39.     public boolean contains(Object o) {
  40.         if (o instanceof Integer) {
  41.             int elem = (int) o;
  42.             if (!(elem < high && elem >= low)) return false;
  43.             else if (sparse[elem-low]==-1) return false;
  44.             else if (sparse[elem-low] < n) return true;
  45.             else return false;
  46.         } else return false;
  47.     }
  48.     @Override
  49.     public boolean add(Integer elem) {
  50.         if (elem<high && elem>=low && !this.contains(elem)) {
  51.             dense[n]=elem;
  52.             sparse[elem-low]=n++;
  53.             return true;
  54.         }else return false;
  55.     }
  56.     @Override
  57.     public boolean remove(Object o) {
  58.         if (o instanceof Integer) {
  59.             int elem=(int) o;
  60.             if (!contains(elem))
  61.                 return false;
  62.             n--;
  63.             dense[sparse[elem - low]] = dense[n];
  64.             sparse[dense[n] - low] = sparse[elem - low];
  65.             sparse[elem-low]=-1;
  66.             return true;
  67.         } return false;
  68.     }
  69.     @Override
  70.     public void clear() {
  71.         n=0;
  72.     }
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement