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