public boolean hasNext() {
			if (++pos >= bucket.sizes[arrayIndex]) {
				// end of array, next array
				pos = 0;
				do {
				  ++arrayIndex;
				} while (arrayIndex < bucket.data.length && bucket.sizes[arrayIndex] == 0);
				
				if (arrayIndex == bucket.data.length) {
					// end of bucket, next bucket
					while (true) {
						++bucketIndex;
						if (bucketIndex < set.buckets.length) {
							bucket = set.buckets[bucketIndex];
							arrayIndex = 0;
							while (true) {
								if (arrayIndex < bucket.data.length) {
									if (bucket.sizes[arrayIndex] == 0) {
										++arrayIndex;
									} else {
										return true;
									}
								} else {
									break;
								}
							}							
						} else {
							return false;
						}						
					}	
				}
			}
			return true;
		}