作者 crossoverJie

:recycle: Refactoring code.

... ... @@ -33,11 +33,16 @@ public abstract class AbstractConsistentHash {
*/
protected abstract String getFirstNodeValue(String value);
public void process(List<String> values){
public String process(List<String> values){
String key = values.get(0);
values.remove(0) ;
for (String value : values) {
add(hash(value), value);
}
sort();
return getFirstNodeValue(key) ;
}
/**
... ...
... ... @@ -12,12 +12,13 @@ import java.util.List;
* @since JDK 1.8
*/
public class ConsistentHashHandle implements RouteHandle {
private AbstractConsistentHash hash = new SortArrayMapConsistentHash() ;
@Override
public String routeServer(List<String> values) {
return null;
String key = values.get(0);
values.remove(0) ;
hash.process(values);
return "";
}
}
... ...
... ... @@ -14,18 +14,18 @@ public class SortArrayMapConsistentHash extends AbstractConsistentHash {
private SortArrayMap sortArrayMap = new SortArrayMap();
@Override
protected void add(long key, String value) {
public void add(long key, String value) {
sortArrayMap.add(key, value);
}
@Override
protected void sort() {
public void sort() {
sortArrayMap.sort();
sortArrayMap.print();
}
@Override
protected String getFirstNodeValue(String value) {
public String getFirstNodeValue(String value) {
long hash = super.hash(value);
System.out.println("value=" + value + " hash = " + hash);
return sortArrayMap.firstNodeValue(hash);
... ...
... ... @@ -14,12 +14,12 @@ public class TreeMapConsistentHash extends AbstractConsistentHash {
private TreeMap<Long,String> treeMap = new TreeMap<Long, String>() ;
@Override
protected void add(long key, String value) {
public void add(long key, String value) {
treeMap.put(key, value);
}
@Override
protected String getFirstNodeValue(String value) {
public String getFirstNodeValue(String value) {
long hash = super.hash(value);
System.out.println("value=" + value + " hash = " + hash);
SortedMap<Long, String> last = treeMap.tailMap(hash);
... ...
package com.crossoverjie.cim.common.route.algorithm.consistenthash;
import org.junit.Assert;
import org.junit.Test;
import java.util.ArrayList;
... ... @@ -14,13 +15,14 @@ public class SortArrayMapConsistentHashTest {
AbstractConsistentHash map = new SortArrayMapConsistentHash() ;
List<String> strings = new ArrayList<String>();
strings.add("zhangsan") ;
for (int i = 0; i < 10; i++) {
strings.add("127.0.0." + i) ;
}
map.process(strings);
String process = map.process(strings);
System.out.println(process);
Assert.assertEquals("127.0.0.8",process);
String firstNodeValue = map.getFirstNodeValue("zhangsan");
System.out.println(firstNodeValue);
}
@Test
... ... @@ -28,12 +30,28 @@ public class SortArrayMapConsistentHashTest {
AbstractConsistentHash map = new SortArrayMapConsistentHash() ;
List<String> strings = new ArrayList<String>();
strings.add("zhangsan2");
for (int i = 0; i < 10; i++) {
strings.add("127.0.0." + i) ;
}
map.process(strings);
String process = map.process(strings);
System.out.println(process);
String firstNodeValue = map.getFirstNodeValue("zhangsan2");
System.out.println(firstNodeValue);
Assert.assertEquals("127.0.0.4",process);
}
@Test
public void getFirstNodeValue3() {
AbstractConsistentHash map = new SortArrayMapConsistentHash() ;
List<String> strings = new ArrayList<String>();
strings.add("1551253899106") ;
for (int i = 0; i < 10; i++) {
strings.add("127.0.0." + i) ;
}
String process = map.process(strings);
System.out.println(process);
Assert.assertEquals("127.0.0.6",process);
}
}
\ No newline at end of file
... ...
package com.crossoverjie.cim.common.route.algorithm.consistenthash;
import org.junit.Assert;
import org.junit.Test;
import java.util.ArrayList;
... ... @@ -12,13 +13,13 @@ public class TreeMapConsistentHashTest {
AbstractConsistentHash map = new TreeMapConsistentHash() ;
List<String> strings = new ArrayList<String>();
strings.add("zhangsan") ;
for (int i = 0; i < 10; i++) {
strings.add("127.0.0." + i) ;
}
map.process(strings);
String firstNodeValue = map.getFirstNodeValue("zhangsan");
System.out.println(firstNodeValue);
String process = map.process(strings);
System.out.println(process);
Assert.assertEquals("127.0.0.8",process);
}
... ... @@ -28,12 +29,29 @@ public class TreeMapConsistentHashTest {
AbstractConsistentHash map = new TreeMapConsistentHash() ;
List<String> strings = new ArrayList<String>();
strings.add("zhangsan2");
for (int i = 0; i < 10; i++) {
strings.add("127.0.0." + i) ;
}
String process = map.process(strings);
System.out.println(process);
Assert.assertEquals("127.0.0.4",process);
}
@Test
public void getFirstNodeValue3() {
AbstractConsistentHash map = new TreeMapConsistentHash() ;
List<String> strings = new ArrayList<String>();
strings.add("1551253899106") ;
for (int i = 0; i < 10; i++) {
strings.add("127.0.0." + i) ;
}
map.process(strings);
String process = map.process(strings);
String firstNodeValue = map.getFirstNodeValue("zhangsan2");
System.out.println(firstNodeValue);
System.out.println(process);
Assert.assertEquals("127.0.0.6",process);
}
}
\ No newline at end of file
... ...