*/
    public Iterator<K> keys() {
	return new Iterator<K>() {
	    int bucketIndex = 0;
	    LinkedList<MyEntry> bucket = table[bucketIndex];
	    Iterator<MyEntry> listIt = bucket.iterator();
	    MyEntry cur;
	    /**
	     * Finds whether or not there is a next MyEntry object in the array.
	     * @return
	     */
	    @Override
	    public boolean hasNext() {
		if (listIt.hasNext())
		    return true;
		else if (bucketIndex == (table.length-1)) {
		    return false;
		}
		else {
		    for (int i=bucketIndex+1; i<table.length; i++) {
			if (!table[i].isEmpty())
			    return true;
		    }
		}
		return false;
	    }
	    /**
	     * Gives the key associated with the next MyEntry object in the array. Throws a NoSuchElementException if the array has been completely iterated.
	     * @return the key associated with the next MyEntry object.
	     */
	    @Override
	    public K next() {
		K ret = null;
		if (listIt.hasNext()) {
		    cur = listIt.next();
		    ret = cur.key;
		}
		else if (hasNext()) {
		    for (int i=bucketIndex+1; i<table.length; i++) {
			if (!table[i].isEmpty()) {
			    bucketIndex = i;
			    bucket = table[bucketIndex];
			    listIt = bucket.iterator();
			    cur = listIt.next();
			    ret = cur.key;
			    break;
			}
		    }
		}
		else throw new NoSuchElementException("All buckets iterated.");
		return ret;
	    }
	    /**
	     * Removes the current MyEntry.
	     */
	    @Override
	    public void remove() {
		bucket.remove(cur);
	    }

	};
    }