基本概念
存储(键,值)数据对的数据结构(Key, Value)。
根据键(Key)寻找值,(Value)。
此时node中需要存储key和value两个数值
class Node {
K key;
V value;
Node left;
Node right;
public Node(K key ,V value) {
this.key = key;
this.value = value;
left = null;
right = null;
}
}
相关的接口方法
void add(K key, V value);
V remove(K key);
boolean contains(K key);
V get(K key);
void set(K key, V newValue);
int getSize();
boolean isEmpty();
主要的是根据一个key找到他的节点,然后在进行其他的操作。
private Node getNode(K key){
Node cur = dummyHead.next;
while(cur != null){
if(cur.key.equals(key))
return cur;
cur = cur.next;
}
return null;
}
基于二分搜索树进行映射
// 向二分搜索树中添加新的元素(key, value)
@Override
public void add(K key, V value){
root = add(root, key, value);
}
// 向以node为根的二分搜索树中插入元素(key, value),递归算法
// 返回插入新节点后二分搜索树的根
private Node add(Node node, K key, V value){
if(node == null){
size ++;
return new Node(key, value);
}
if(key.compareTo(node.key) < 0)
node.left = add(node.left, key, value);
else if(key.compareTo(node.key) > 0)
node.right = add(node.right, key, value);
else // key.compareTo(node.key) == 0
node.value = value;
return node;
}
映射分类
- 有序映射,基于搜索树进行实现
- 无需映射 基于哈希表进行实现。
集合和映射有一定的关联,当我们有了集合的实现后,可以在节点里在添加一个数据,此时会重写很多方法,更多的是实现map然后将value置为null就可以重用映射里面的很多方法。