Map通常用来存储键-值对有映射关系的数据,且key唯一不可重复,value可重复。
Map接口中常用的的实现类为HashMap和TreeMap。二者都可实现Key-Value模型的数据存储。提供的主要方法功能也几乎一致。
HashMap:底层数据存储是哈希表(链表+数组),且数据无序。操作效率较高。
TreeMap:底层数据存储时红黑树(搜索树),TreeMap当没有自定义实现比较器时按照key的自然顺序排序,数据有序,当自定义实现比较器后,根据传入比较器对象对数据进行排序。
测试HashMap类:https://github.com/bobobo00/TestMap.git;
测试TreeMap类:https://github.com/bobobo00/TestMap.git;
自定义实现HashMap:
哈希表存储的对象内部描述:
package cn.test.mycollection;
/**
*
* @author dell
*
*/
public class MapNode<K,V> {
int hash;
K k;
V v;
MapNode next=null;
public MapNode(K k,V v) {
super();
this.k = k;
this.v = v;
}
public MapNode() {
super();
}
public String toString() {
return String.format("[%s:%s]", k,v);
}
}
实现方法:https://github.com/bobobo00/TestHashMap.git
1,public void put(K key,V value) { };
2,public MapNode search(K key) {};
3,public V get(K key) {};
4,public V getOrDefault(K key,V value) {};
5,public void set(K key,V value) {};
6,public void remove(K key) {};
7,public Set<K> keySet(){};
8,public List<V> valuesSet(){};
9,public Set<MapNode> entrySet(){};
10,public boolean containsKey(K key) {};
11,public boolean containsValue(V value) {};
自定义实现TreeMap:
TreeMap存储对象的内部描述(搜索树):
public static class Node{
int key;
Node left;
Node right;
public Node(int key){
this.key=key;
}
}
TreeMap内部数据结构实现:https://github.com/bobobo00/BinarySearchTree.git
TreeMap简单功能(put,get,remove)实现:https://github.com/bobobo00/MyTreeMap.git