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