Advertisement
And1

Sparse set

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