public Set<Entry<K, V>> entrySet() {
        if (entrySet == null)
            entrySet = new AbstractSet<Entry<K, V>>() {
                // REQUIRED METHODS OF AbstractSet //
                @Override
                public int size() {
                    return size;
                }

                @Override
                public Iterator<Entry<K, V>> iterator() {
                    return new SequenceIterator<Entry<K, V>>(intMap.values().iterator());
                }

                // OVERRIDDEN METHODS OF AbstractSet //
                @Override
                public boolean contains(Object e) {
                    if (!(e instanceof Entry))
                        return false;
                    V value = get(((Entry<?, ?>) e).getKey());
                    return value != null && value.equals(((Entry<?, ?>) e).getValue());
                }
            };
        return entrySet;
    }