@Override
 public void clear() {
   for (Index i : index) {
     storage.removeItem(getId(i.getId()));
   }
   index.clear();
   updateIndex();
 }
 @Override
 public void delete(long key) {
   for (Index i : index) {
     if (i.getId() == key) {
       index.remove(i);
       storage.removeItem(getId(key));
       updateIndex();
       break;
     }
   }
 }
  private void updateIndex() {
    Collections.sort(index, comparator);
    DataOutput dataOutput = new DataOutput();
    dataOutput.writeInt(index.size());

    for (Index i : index) {
      dataOutput.writeLong(i.getId());
      dataOutput.writeLong(i.getSortKey());
    }

    storage.setItem("list_" + prefix + "_index", toBase64(dataOutput.toByteArray()));
  }
  @Override
  public void updateOrAdd(ListEngineRecord record) {
    // Update Index
    for (Index i : index) {
      if (i.getId() == record.getKey()) {
        index.remove(i);
        break;
      }
    }
    index.add(new Index(record.getKey(), record.getOrder()));
    updateIndex();

    // Save record
    storage.setItem(getId(record.getKey()), toBase64(record.getData()));
  }
  @Override
  public ListEngineRecord loadItem(long key) {
    Index indexValue = null;
    for (Index i : index) {
      if (i.getId() == key) {
        indexValue = i;
        break;
      }
    }

    if (indexValue == null) {
      return null;
    }

    String item = storage.getItem(getId(key));
    if (item != null) {
      byte[] res = fromBase64(item);
      return new ListEngineRecord(key, indexValue.getSortKey(), null, res);
    }
    return null;
  }