code: @Override
    public Iterable<K> keys() {
      return new Iterable<K>() {
        @Override
        public Iterator<K> iterator() {
          final Iterator<CacheEntry<K,V>> it = BaseCache.this.iterator();
          return new Iterator<K>() {
            @Override
            public boolean hasNext() {
              return it.hasNext();
            }
  
            @Override
            public K next() {
              return it.next().getKey();
            }
  
            @Override
            public void remove() {
              throw new UnsupportedOperationException();
            }
          };
        }
      };
    }
docs: Key iteration on top of normal iterator.