`
lxs647
  • 浏览: 523246 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HashMap Hashtable LinkedHashMap 和TreeMap区别【转】

阅读更多

     java 为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap。
     Map 主要用于存储健值对,根据键得到值,因此不允许键重复,但允许值重复。
     Hashmap 是一个 最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。HashMap最多只允许一条记录的键为Null;允许多条记录的值Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。
     Hashtable 与 HashMap类似,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了 Hashtable在写入时会比较慢。
     LinkedHashMap 保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.在遍历 的时候会比HashMap慢,不过有种情况例外,当HashMap容量很大,实际数据较少时,遍历起来可能会比LinkedHashMap慢,因为 LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关。
     TreeMap 实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。


Java代码

   1. public static void main(String[] args) { 
   2.  
   3.         Map<String, String> map = new HashMap<String, String>(); 
   4.         for(int i=0;i<100;i++){ 
   5.             map.put("a"+i,String.valueOf(i)); 
   6.         } 
   7.         map.put("a3", "dd"); 
   8.         map.put("a2", "bb"); 
   9.         map.put("a1", "cc"); 
  10.         for (Iterator iterator = map.values().iterator(); iterator.hasNext();) { 
  11.             String name = (String) iterator.next(); 
  12.             System.out.println(name); 
  13.         } 
  14.  
  15.         Map<String, String> map1 = new LinkedHashMap<String, String>(); 
  16.         map1.put("a3", "dd"); 
  17.         map1.put("a2", "bb"); 
  18.         map1.put("a1", "cc"); 
  19.         for (Iterator iterator = map1.values().iterator(); iterator.hasNext();) { 
  20.             String name = (String) iterator.next(); 
  21.             System.out.println(name); 
  22.         } 
  23.  
  24.          Map<String, String> map2 = new TreeMap<String, String>(new Comparator<Object>(){ 
  25.             Collator collator = Collator.getInstance(); 
  26.             public int compare(Object o1, Object o2) { 
  27.                 CollationKey key1 = collator.getCollationKey(o1.toString()); 
  28.                 CollationKey key2 = collator.getCollationKey(o2.toString()); 
  29.                 return key2.compareTo(key1); 
  30.                 //return collator.compare(o1, o2); 
  31.             }}); 
  32.         map2.put("a3", "dd"); 
  33.         map2.put("a2", "bb"); 
  34.         map2.put("a1", "cc"); 
  35.         for (Iterator iterator = map2.values().iterator(); iterator.hasNext();) { 
  36.             String name = (String) iterator.next(); 
  37.             System.out.println(name); 
  38.         } 
  39.     } 

public static void main(String[] args) {

        Map<String, String> map = new HashMap<String, String>();
        for(int i=0;i<100;i++){
            map.put("a"+i,String.valueOf(i));
        }
        map.put("a3", "dd");
        map.put("a2", "bb");
        map.put("a1", "cc");
        for (Iterator iterator = map.values().iterator(); iterator.hasNext();) {
            String name = (String) iterator.next();
            System.out.println(name);
        }

        Map<String, String> map1 = new LinkedHashMap<String, String>();
        map1.put("a3", "dd");
        map1.put("a2", "bb");
        map1.put("a1", "cc");
        for (Iterator iterator = map1.values().iterator(); iterator.hasNext();) {
            String name = (String) iterator.next();
            System.out.println(name);
        }

         Map<String, String> map2 = new TreeMap<String, String>(new Comparator<Object>(){
            Collator collator = Collator.getInstance();
            public int compare(Object o1, Object o2) {
                CollationKey key1 = collator.getCollationKey(o1.toString());
                CollationKey key2 = collator.getCollationKey(o2.toString());
                return key2.compareTo(key1);
                //return collator.compare(o1, o2);
            }});
        map2.put("a3", "dd");
        map2.put("a2", "bb");
        map2.put("a1", "cc");
        for (Iterator iterator = map2.values().iterator(); iterator.hasNext();) {
            String name = (String) iterator.next();
            System.out.println(name);
        }
    }

分享到:
评论

相关推荐

    java中HashMap,LinkedHashMap,TreeMap,HashTable的区别

    ### Java中HashMap, LinkedHashMap, TreeMap,HashTable的区别 在Java编程语言中,`Map`接口是集合框架中的一个重要组成部分,用于存储键值对。本文将详细分析四种常用的`Map`实现类:`HashMap`, `LinkedHashMap`, ...

    HashMap,HashTable,LinkedHashMap,TreeMap的区别

    HashMap, HashTable, LinkedHashMap, TreeMap 的区别 在 Java 中,Map 是一个非常重要的集合类,用于存储键值对。其中,HashMap, HashTable, LinkedHashMap, TreeMap 是四种常用的 Map 实现类,每种类都有其特点和...

    java HashMap,TreeMap与LinkedHashMap的详解

    在Java编程语言中,`HashMap`、`TreeMap`和`LinkedHashMap`都是`java.util.Map`接口的实现,它们提供了不同的数据存储和访问策略。本文将深入探讨这三种数据结构的特点、工作原理以及适用场景。 1. **HashMap** `...

    Java集合专题总结:HashMap 和 HashTable 源码学习和面试总结

    Map接口用于保存具有key-value映射关系的数据,常见的Map实现包括HashMap、TreeMap、HashTable和LinkedHashMap等。Queue是Java提供的队列实现。 本文总结了HashMap和HashTable的源码学习和面试总结,涵盖了它们的...

    第9讲 对比Hashtable、HashMap、TreeMap有什么不同?1

    了解Map的整体结构也很重要,HashMap和其他Map实现如LinkedHashMap(保持插入顺序或访问顺序的HashMap)都是从AbstractMap继承,而Hashtable则直接继承Dictionary类,这反映了它们设计上的差异和适用场景的不同。...

    HashMap vs TreeMap vs Hashtable vs LinkedHashMap

    HashMap是最常用的Map实现,它提供了快速的查找,但不保证元素的顺序,且允许null键和值。TreeMap则按Key的自然排序或自定义排序存储元素,适合需要排序的场景。HashTable是线程安全的,但效率相对较低,不推荐在单...

    Collection,List,Set和_Map用法和区别

    Map 的实现类有 Hashtable、HashMap、LinkedHashMap 和 TreeMap。Hashtable 是一种线程安全的哈希表,HashMap 是一种线程不安全的哈希表,LinkedHashMap 是一种链表哈希表,TreeMap 是一种树形哈希表。 在实际应用...

    java7hashmap源码-learning-record:学习轨迹记录

    HashTable和HashMap的区别详解 LeetCode 27. 删除元素(Remove Element) 7月8号 7月5号 复习hashMap concurrentHashmap [LeetCode 70. 爬楼梯(Climbing Stairs).md](Java基础/数据结构与算法/LeetCode/LeetCode ...

    Java面试的10个问题(含参考答案).docx

    Map接口是双列集合,存储键值对,例如Hashtable、HashMap、LinkedHashMap和TreeMap。Hashtable是线程安全的,HashMap非线程安全但性能较高,LinkedHashMap保持插入顺序,TreeMap则根据键进行排序。 在SQL中,事务...

    java集合详解与总结.pdf

    4. Map接口存储键值对,其实现类包括HashMap、LinkedHashMap、TreeMap和Hashtable。HashMap是非同步的,允许null键和值,查找和插入速度快。LinkedHashMap保持了插入顺序或访问顺序,TreeMap按照键的自然排序或...

    HashMap底层原理.pdf

    本文将详细介绍HashMap的底层原理,包括其内部实现结构、关键字段的作用、以及JDK 1.7和JDK 1.8版本的主要区别。 首先,HashMap是基于哈希表的Map接口非同步实现,它允许使用null值和null键,这意味着HashMap在设计...

    Java容器有两种基本类型Collection 和 Map

    Map 的主要实现类有 HashMap、LinkedHashMap 和 TreeMap。HashMap 是基于散列表的实现,插入和查询“键值对”的开销是固定的。LinkedHashMap 类似于 HashMap,但是迭代器遍历它时,取得“键值对”的顺序是其插入次序...

    java面试笔记.pdf

    4. HashMap和TreeMap的区别: - TreeMap实现了SortedMap接口,基于红黑树,而HashMap基于哈希散列表实现。 - TreeMap插入、删除速度慢,因为需要维护树的平衡。 - TreeMap默认按键的升序排序,而HashMap是随机存储。...

    Java集合框架常见面试题.pdf

    Map接口没有直接的实现类,但它有一些重要的实现,如HashMap、LinkedHashMap和TreeMap。HashMap是基于哈希表实现的,查找和插入速度较快,但不保证元素的顺序;LinkedHashMap则在HashMap基础上保持了插入顺序或访问...

    HashMapvs.TreeMapvs.Hashtable

    在Java编程语言中,`HashMap`、`TreeMap`和`Hashtable`是三种常见的集合类,它们都实现了`Map`接口,用于存储键值对数据。理解这些类的区别和应用场景对于提升Java开发技能至关重要。 首先,`HashMap`是Java中最...

    2021-3月Java面试题.docx

    主要实现类有HashMap、LinkedHashMap、TreeMap和Hashtable。 - HashMap是基于哈希表的数据结构,JDK1.8以前是数组+链表,JDK1.8后引入了红黑树,当链表长度达到8时转换为红黑树,提高了查找效率。 - LinkedHashMap...

    Java集合框架详解

    主要实现类包括HashMap、Hashtable、LinkedHashMap和TreeMap。 1. HashMap:它利用键的hashCode值存储数据,根据键快速定位到值。由于使用了哈希表的存储方式,HashMap通常能够提供较快的读写性能。它的遍历顺序是...

    Java集合框架全面介绍.pdf

    Map接口的实现包括HashMap、LinkedHashMap、TreeMap和Hashtable。HashMap是最常用的实现,它提供了快速的查找和插入,但不保证元素顺序。LinkedHashMap保持了插入顺序或访问顺序,而TreeMap按照键的自然排序或比较器...

    Java集合框架面试题

    6. HashMap、LinkedHashMap、TreeMap 的区别: - LinkedHashMap 保存了记录的插入顺序,遍历要比 HashMap 要慢。 - TreeMap 实现了 SortMap 接口,能够把保存的记录按照键排序。 7. Set 实现类比较: - HashSet...

    Java 最常见的 208 道面试题:第二模块答案

    3. **Map**:键值对的集合,如 HashMap、HashTable、LinkedHashMap、TreeMap 和 ConcurrentHashMap。 **HashMap 和 Hashtable 的区别**: - **线程安全性**:Hashtable 是线程安全的,而 HashMap 不是。在多线程...

Global site tag (gtag.js) - Google Analytics