HashMap&HashTable&LinkedHashMap&TreeMap 太过爱你忘了你带给我的痛 2022-05-17 11:18 271阅读 0赞 最近发现对Map类的理解还不够深刻 ,因此在这边赶紧总结mark一下,Map类还是非常有用滴~ * # **(1)HashMap与HashTable:** # 相同点:这两者都存储的键值对是无序的 不同点:HashMap线程不安全;HashTable线程不安全; HashMap支持key或value的值为Null;Hashtable不支持key或value的值为Null,非法 一般现在不建议用HashTable,因为: ①HashTable是HashTable是遗留类,内部实现很多没优化和冗余。 ②即使在多线程环境下,现在也有同步的ConcurrentHashMap替代,没有必要因为是多线程而用HashTable。 * # (2)LinkedHashMap&TreeMap # linkedHashMap可以实现按照插入顺序或访问顺序进行排序,是HashMap的子类,内部多了双向链表来保存顺序 treeMap按照自然顺序或者比较器自定义实现来排序,采用红黑树实现,红黑树的中序遍历是有序的 * package DEMO; import java.util.*; //linkedHashMap可以实现按照插入顺序和访问顺序进行排序,是HashMap的子类,内部多了双向链表来保存顺序 //treeMap按照自然顺序或者比较器自定义实现来排序 public class HashMapDemo { public static void main(String[] args) { //HashMap支持key或value的值为Null //注意:HashMap只允许一个key为null HashMap<String, Integer> hashMap = new HashMap<String, Integer>(); hashMap.put(null, null); hashMap.put(null, 2); System.out.println(hashMap.get(null)); //Hashtable不支持key或value的值为Null,非法 /* Hashtable<String,Integer> hashtable = new Hashtable<>(); hashtable.put(null,2); System.out.println(hashtable.containsKey(null)); */ //LinkedMap Map<String, Integer> linkedHashMap = new LinkedHashMap<>(); linkedHashMap.put("b", 7); linkedHashMap.put("c", 2); linkedHashMap.put("a", 3); linkedHashMap.put("e", 6); Iterator it = linkedHashMap.entrySet().iterator(); System.out.println("=============linkedHashMap:插入顺序=============="); while (it.hasNext()) System.out.println(it.next());//我们可以看到,其输出顺序是完成按照插入顺序的 //按照访问顺序访问,最先返回最久没有访问过的。如果使用了put/get操作,将对应的键值对放到末尾(末尾存储最近被访问过的) Map<String, String> linkedmap2 = new LinkedHashMap<String, String>(16, 0.75f, true); linkedmap2.put("apple", "苹果"); linkedmap2.put("watermelon", "西瓜"); linkedmap2.put("banana", "香蕉"); linkedmap2.put("peach", "桃子"); linkedmap2.get("apple"); Iterator iter = linkedmap2.entrySet().iterator(); System.out.println("=============LinkedHashMap:访问顺序=============="); while (iter.hasNext()) { System.out.println(iter.next()); } //TreeMap,默认按照自然顺序排序 Map<String, Integer> treeMap = new TreeMap<>(); treeMap.put("3", 7); treeMap.put("4", 2); treeMap.put("1", 3); treeMap.put("5", 6); it = treeMap.entrySet().iterator(); System.out.println("=============treeMap:升序=============="); while (it.hasNext()) System.out.println(it.next()); } } 更多参考链接: * [http://yikun.github.io/2015/04/06/Java-TreeMap%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E5%8F%8A%E5%AE%9E%E7%8E%B0/][http_yikun.github.io_2015_04_06_Java-TreeMap_E5_B7_A5_E4_BD_9C_E5_8E_9F_E7_90_86_E5_8F_8A_E5_AE_9E_E7_8E_B0] [http_yikun.github.io_2015_04_06_Java-TreeMap_E5_B7_A5_E4_BD_9C_E5_8E_9F_E7_90_86_E5_8F_8A_E5_AE_9E_E7_8E_B0]: http://yikun.github.io/2015/04/06/Java-TreeMap%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E5%8F%8A%E5%AE%9E%E7%8E%B0/
还没有评论,来说两句吧...