Advertisement
Guest User

Untitled

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