一致性哈希算法介绍,及java实现(三)
tring) key);
if (!circle.containsKey(hash)) {
SortedMap tailMap = circle.tailMap(hash); ////返回此映射的部分视图,其键大于等于 hash
hash = tailMap.isEmpty() circle.firstKey() : tailMap.firstKey();
}
return circle.get(hash);
}
public long getSize() {
return circle.size();
}
}
复制代码
我们写一个程序来测试以下:
复制代码
public class MainApp {
public static void main(String[] args) {
Set nodes = new HashSet();
nodes.add("A");
nodes.add("B");
nodes.add("C");
ConsistentHash consistentHash = new ConsistentHash(new HashFunction(), 160, nodes);
consistentHash.add("D");
System.out.println(consistentHash.getSize()); //640
System.out.println(consistentHash.get("test5"));
}
}
复制代码
运行结果:
640
B
640就是虚拟节点的个数,这个数值的大小影响分配的是否均衡