hashmap:遍历时顺序无法保证
linkedhashmap:遍历时按照插入顺序
treemap:遍历时按照大小顺序
linkedhashmap实现上是继承了hashmap,多了一个双向的链表记录插入顺序,重写了迭代器,基于这个双向链表。
treemap是在内部重定义了entry,加上了left,right,parent变量,维持了一个搜索二叉树的结构。本质上,treemap已经不是map的结构了,map主要的特性是随机存取,而treemap本质上是一个二叉搜索树,更具体的是是一个平衡的二叉所搜树(红黑树和平衡二叉搜索树还不是一个概念),查看treemap的源码,发现是实现了Navigable的接口,里面的方法除了get,put外是找前驱和后继的,这正是搜索树干的事情,接口内容大大不同,前两者还是实现的map的接口,做的是随机存取的事情。
package ThreadTest;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
public class Test9 {
public static void main(String[] args) {
Map<Integer, String> hashMap = new HashMap<>();
hashMap.put(10, "10");
hashMap.put(11, "11");
hashMap.put(2, "2");
hashMap.put(4, "4");
hashMap.put(9, "9");
for(Entry<Integer, String> entry : hashMap.entrySet()){
System.out.println(entry);
}
Map<Integer, String> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put(10, "10");
linkedHashMap.put(11, "11");
linkedHashMap.put(2, "2");
linkedHashMap.put(4, "4");
linkedHashMap.put(9, "9");
for(Entry<Integer, String> entry : linkedHashMap.entrySet()){
System.out.println(entry);
}
Map<Integer, String> treeMap = new TreeMap<>();
treeMap.put(10, "10");
treeMap.put(11, "11");
treeMap.put(2, "2");
treeMap.put(4, "4");
treeMap.put(9, "9");
for(Entry<Integer, String> entry : treeMap.entrySet()){
System.out.println(entry);
}
}
}