zoukankan      html  css  js  c++  java
  • 最简单的一致性Hash算法实现

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

    public class ConsistentHash<T> {

    private final HashFunction hashFunction;
    private final int numberOfReplicas;
    private final SortedMap<Integer, T> circle = new TreeMap<Integer, T>();

    public ConsistentHash(HashFunction hashFunction, int numberOfReplicas,
         Collection<T> 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<Integer, T> tailMap = circle.tailMap(hash);
         hash = tailMap.isEmpty() ? circle.firstKey() : tailMap.firstKey();
       }
       return circle.get(hash);
    }

    }
  • 相关阅读:
    第九周作业
    第八周作业
    第七周作业
    第六周作业
    JAVA面向对象详细总结
    父愁者联盟--需求规格说明书
    案例分析
    软件工程编程作业1
    构建之法观后提问
    第一次随笔——准备工作
  • 原文地址:https://www.cnblogs.com/zhangxsh/p/3856058.html
Copyright © 2011-2022 走看看