code: public MappedListIterator<VLinkedPagedKey, LK> listIterator(LK linearKey, boolean next) {
          int indexPage = 0;
          if(linearKey == null) {
              if(next) {
                  indexPage = 0;
              } else {
                  List<Map<String, Object>> indexList = _pageIndex.getValue(_identifier);
                  if(indexList != null) {
                      VPageIndexEntry<LK> entry = VPageIndexEntry.valueOf(indexList.get(indexList.size()),
                                                                          _serializer);
                      indexPage = entry.getPageId();
                  }
              }
          } else {
              List<Map<String, Object>> indexList = _pageIndex.getValue(_identifier);
              if(indexList != null) {
                  Map<String, Object> searchKey = new VPageIndexEntry<LK>(0, linearKey, _serializer).mapValue();
                  int position = Collections.binarySearch(indexList, searchKey, _pageIndexComparator);
                  if(position < 0) {
                      position = -1 * (position + 1);
                  }
                  indexPage = VPageIndexEntry.valueOf(indexList.get(position), _serializer)
                                             .getPageId();
              }
          }
  
          return listIterator(linearKey, next, indexPage);
      }
docs: Return a listIterator<K>. Uses the page index to figure out what page to
  start iterating from.
  
  Runtime: 2 - 3 gets.
  
  @param linearKey key to position the cursor.
  @param next true if the cursor is to be placed directly before the first
  key that is less than linearKey false if the cursor is to be
  placed directly after the last key that is greater than linearKey
  @return a ListIterator of <K> ids.