java实现一致性hash

转载:https://weblogs.java.net/blog/2007/11/27/consistent-hashing
参见:http://blog.csdn.net/sparkliang/article/details/5279393


import java.util.Collection;
import java.util.SortedMap;
import java.util.TreeMap;


public class ConsistentHash {
 private final HashFunction hashFunction;
 private final int numberOfReplicas;
 private final SortedMap circle = new TreeMap();
 public ConsistentHash(HashFunction hashFunction, int numberOfReplicas,
     Collection nodes) {
   this.hashFunction = hashFunction;
   this.numberOfReplicas = numberOfReplicas;

   for (T node : nodes) {
     add(node);
   }
 }

 public void add(T node) {
   for (int i = 0; i < numberOfReplicas; i++) {
     circle.put(hashFunction.hash(node.toString() + i), node);
   }
 }

 public void remove(T node) {
   for (int i = 0; i < numberOfReplicas; i++) {
     circle.remove(hashFunction.hash(node.toString() + i));
   }
 }

 public T get(Object key) {
   if (circle.isEmpty()) {
     return null;
   }
   int hash = hashFunction.hash(key);
   if (!circle.containsKey(hash)) {
     SortedMap tailMap = circle.tailMap(hash);
     hash = tailMap.isEmpty() ? circle.firstKey() : tailMap.firstKey();
   }
   return circle.get(hash);
 }

}
请使用浏览器的分享功能分享到微信等