写点什么

第五周作业

用户头像
oooh-la
关注
发布于: 2021 年 02 月 02 日

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

}

}

用户头像

oooh-la

关注

还未添加个人签名 2020.12.14 加入

还未添加个人简介

评论

发布
暂无评论
第五周作业