Java 中 TreeMap、HashMap 和 LinkedHashMap 之间的区别
java programming java8object oriented programming
HashMap、TreeMap 和 LinkedHashMap 都实现了 java.util.Map 接口,它们的特点如下。
HashMap
HashMap 的插入和查找复杂度为 O(1)。
HashMap 允许一个 null 键和多个 null 值。
HashMap 不保持任何顺序。
TreeMap
TreeMap 的插入和查找复杂度为 O(logN)。
TreeMap 不允许 null 键,但允许多个 null 值。
TreeMap 保持顺序。它按排序和升序存储键。
LinkedHashMap
LinkedHashMap 的插入和查找复杂度为 O(1)。
LinkedHashMap 允许一个空键和多个空值。
LinkedHashMap 维护插入键值对的顺序。
示例
import java.util.HashMap; import java.util.Hashtable; import java.util.LinkedHashMap; import java.util.Map; import java.util.TreeMap; public class Tester { public static void main(String args[]) { Map<String, String> map = new HashMap<String, String>(); map.put("One", "1"); map.put("Five", "5"); map.put("Four", "4"); map.put("Two", "2"); map.put("Three", "3"); System.out.println("HashMap:
" + map); Map<String, String> map1 = new LinkedHashMap<String, String>(); map1.put("One", "1"); map1.put("Five", "5"); map1.put("Four", "4"); map1.put("Two", "2"); map1.put("Three", "3"); System.out.println("LinkedHashMap:
" + map1); Map<String, String> map2 = new TreeMap<String, String>(); map2.put("One", "1"); map2.put("Five", "5"); map2.put("Four", "4"); map2.put("Two", "2"); map2.put("Three", "3"); System.out.println("TreeMap:
" + map2); } }
输出
HashMap: {Five = 5, One = 1, Four = 4, Two = 2, Three = 3} LinkedHashMap: {One = 1, Five = 5, Four = 4, Two = 2, Three = 3} TreeMap: {Five = 5, Four = 4, One = 1, Three = 3, Two = 2}
从这里可以看出,HashMap 的键的顺序是随机的,LinkedHashMap 保存了键的插入顺序,而 TreeMap 的键是有序的。