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);
    }

    }
  • 相关阅读:
    文件上传利器JQuery上传插件Uploadify
    记自己的第一个完整的java web项目
    win7下oracle的安装
    Linux下redis的安装
    微信公众号开发地理位置坐标的转换
    Apache Log4j配置说明
    eclipse安装svn插件
    网站引入外部js
    蛇形填数
    第一节:Scrapy开源框架初探
  • 原文地址:https://www.cnblogs.com/zhangxsh/p/3856058.html
Copyright © 2011-2022 走看看