76 lines
1.7 KiB
Markdown
76 lines
1.7 KiB
Markdown
# TreeMap in Java
|
|
|
|
|
|
java 中 TreeMap的实现原理。
|
|
|
|
|
|
|
|
#### 特点
|
|
|
|
* 有序的Key-value 集合,通过红黑树实现;
|
|
* 遍历时元素按照键key的自然顺序进行排序,也可以创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法
|
|
* TreeMap的基本操作 containsKey、get、put 和 remove 的时间复杂度是 log(n)
|
|
|
|
|
|
|
|
#### 引用场景
|
|
|
|
* 一致性Hash算法
|
|
|
|
|
|
|
|
## 使用
|
|
|
|
```
|
|
//创建TreeMap对象:
|
|
TreeMap<String,Integer> treeMap = new TreeMap<String,Integer>();
|
|
|
|
//新增元素:
|
|
treeMap.put("hello",1);
|
|
treeMap.put("world",2);
|
|
treeMap.put("my",3);
|
|
treeMap.put("name",4);
|
|
|
|
|
|
//遍历元素, 按照key排序
|
|
Set<Map.Entry<String,Integer>> entrySet = treeMap.entrySet();
|
|
for(Map.Entry<String,Integer> entry : entrySet){
|
|
String key = entry.getKey();
|
|
Integer value = entry.getValue();
|
|
System.out.println("TreeMap元素的key:"+key+",value:"+value);
|
|
}
|
|
|
|
String firstKey = treeMap.firstKey();//获取集合内第一个元素
|
|
|
|
String lastKey =treeMap.lastKey();//获取集合内最后一个元素
|
|
|
|
String lowerKey =treeMap.lowerKey("jiaboyan");//获取集合内的key小于"jiaboyan"的第一个key
|
|
|
|
String ceilingKey =treeMap.ceilingKey("jiaboyan");//获取集合内的key大于等于"jiaboyan"的第一个key
|
|
|
|
```
|
|
|
|
## 原理
|
|
|
|
|
|
参考 
|
|
|
|
|
|
## 应用
|
|
|
|
|
|
|
|
### 一致性Hash算法
|
|
|
|
一致性Hash算法解决的问题是: 数据均匀的分片存储在不同的机器节点上,且在机器节点上发送增删时 (扩容或者缩容时) ,最少数据集的映射(rehash) 规则发生改变。
|
|
|
|
简单说下原理:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|