private void findTop() {
   topKey = null;
   topValue = null;
   while (source.hasTop()) {
     if (inBounds(source.getTopKey())) {
       topKey = source.getTopKey();
       topValue = source.getTopValue();
       return;
     } else {
       try {
         source.next();
       } catch (final IOException e) {
         throw new RuntimeException(e);
       }
     }
   }
 }
 @Override
 public boolean hasTop() {
   return mapIterator.hasTop();
 }
 @Override
 public synchronized boolean hasTop() {
   return source.hasTop();
 }