public void remove(E e) {
   for (int i = 0; i < replicas; ++i) {
     Long hash = Long.valueOf(func.hash(e.toString() + i));
     circle.remove(hash);
   }
   values.remove(e);
 }
 public void add(E e) {
   for (int i = 0; i < replicas; ++i) {
     Long hash = Long.valueOf(func.hash(e.toString() + i));
     circle.put(hash, e);
   }
   values.add(e);
 }
  public E get(String key) {
    if (circle.isEmpty()) {
      return null;
    }

    Long hash = Long.valueOf(func.hash(key));
    if (circle.containsKey(hash)) {
      return get(hash);
    }

    Circle<E> tail = circle.tail(hash);
    if (tail.isEmpty()) {
      return get(circle.firstKey());
    }
    return get(tail.firstKey());
  }
 protected E get(Long key) {
   return circle.get(key);
 }