`
iuottp
  • 浏览: 169709 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

关于HashTable,HashMap和TreeMap的几点心得

    博客分类:
  • JAVA
阅读更多

        刚开始看到HashTable,HashMap和TreeMap的时候比较晕,觉得作用差不多,但是到实际运用的时候又发现有许多差别的。于是自己搜索了一些相关资料来学习,以下就是我的学习沉淀。

         java为数据结构中的映射定义了一个接口java.util.Map,而HashMap Hashtable和TreeMap就是它的实现类。Map是将键映射到值的对象,一个映射不能包含重复的键;每个键最多只能映射一个一个值。

          Hashmap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为Null;允许多条记录的值为Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力.

          Hashtable 与 HashMap类似,但是主要有6点不同。

         1.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。   

        2.HashTable不允许null值,key和value都不可以,HashMap允许null值,key和value都可以。HashMap允许key值只能由一个null值,因为hashmap如果key值相同,新的key, value将替代旧的。   

        3.HashTable有一个contains(Object value)功能和containsValue(Object value)功能一样。   

        4.HashTable使用Enumeration,HashMap使用Iterator。   

        5.HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。   

        6.哈希值的使用不同,HashTable直接使用对象的hashCode。

        TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。

        下面是HashTable,HashMap和TreeMap总结的一个经典例子。

package com.taobao.luxiaoting;

import java.util.Map;   

import java.util.HashMap;   

import java.util.Set;   

import java.util.HashSet;   

import java.util.Iterator;   

import java.util.Hashtable;   

import java.util.TreeMap;   

class  HashMaps   

{   

       public static void main(String[] args)    

      {   

            Map map=new HashMap();               

            map.put(“a”, “aaa”);   

            map.put(“b”, “bbb”);   

            map.put(“c”, “ccc”);   

            map.put(“d”, “ddd”);   

              

            Iterator iterator = map.keySet().iterator();               

            while (iterator.hasNext()) {   

             Object key = iterator.next();   

             System.out.println(“map.get(key) is :”+map.get(key));   

            }         

                               

            Hashtable tab=new Hashtable();               

            tab.put(“a”, “aaa”);   

            tab.put(“b”, “bbb”);   

            tab.put(“c”, “ccc”);   

            tab.put(“d”, “ddd”);   

            Iterator iterator_1 = tab.keySet().iterator();   

            while (iterator_1.hasNext()) {   

             Object key = iterator_1.next();   

             System.out.println(“tab.get(key) is :”+tab.get(key));   

            }            

               

            TreeMap tmp=new TreeMap();               

            tmp.put(“a”, “aaa”);   

            tmp.put(“b”, “bbb”);   

            tmp.put(“c”, “ccc”);   

            tmp.put(“d”, “ddd”);   

            Iterator iterator_2 = tmp.keySet().iterator();   

            while (iterator_2.hasNext()) {   

             Object key = iterator_2.next();   

             System.out.println(“tmp.get(key) is :”+tmp.get(key));   

            }            

        }   

    }   

输出结果如下图所示

 

  这样就可以明显看出只有TreeMap得到的记录是排过序的。

转载务必注明出处Taobao QA Team,原文地址:http://qa.taobao.com/?p=7337

分享到:
评论

相关推荐

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

    HashMap、Hashtable和TreeMap都是Java中实现Map接口的类,它们用于存储键值对数据,但各自具有不同的特点和使用场景。 HashMap是最常用的Map实现,它通过哈希表(散列表)实现,提供快速的插入、查找和删除操作,...

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

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

    HashMap,HashTable,LinkedHashMap,TreeMap的区别

    其中,HashMap, HashTable, LinkedHashMap, TreeMap 是四种常用的 Map 实现类,每种类都有其特点和用途。本文将对这四种 Map 实现类进行比较和分析。 HashMap HashMap 是 Java 中最常用的 Map 实现类,它根据键的 ...

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

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

    java HashMap,TreeMap与LinkedHashMap的详解

    在示例中,`HashMap`、`Hashtable`和`TreeMap`的使用方式类似,但它们的行为不同。`Hashtable`与`HashMap`类似,但它是线程安全的,并且不接受null值。而`TreeMap`则根据键的自然顺序对键值对进行了排序。 ```java ...

    HashMap vs TreeMap vs Hashtable vs LinkedHashMap

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

    JAVA中HashMap的用法.docx

    在示例代码中,我们创建了三个Map实例:HashMap、Hashtable和TreeMap。HashMap展示了无序的特性,而TreeMap则按顺序打印键值对。Hashtable是HashMap的线程安全版本,但在Java 5之后,推荐使用并发集合如...

    集合框架包含collection和map的子类

    集合框架包含collection和map的子类。其中collection包含list、set和queue。map包括hashmap、hashtable和treemap

    HashMap底层原理.pdf

    以下是HashMap中几个重要的字段及其作用: - DEFAULT_INITIAL_CAPACITY:默认初始化容量,为1,即16。在构造HashMap时,如果未指定容量大小,默认会被初始化为16。 - MAXIMUM_CAPACITY:最大容量,为1,即***。 - ...

    HashMap资料.zip

    9. **HashMap与HashTable的区别**:HashTable是早期的线程安全版本,但它不允许null键和值,且性能较低,已经被ConcurrentHashMap所取代。 10. **面试常见问题**:面试中常问的问题包括HashMap的扩容机制、哈希冲突...

    Hashtable的使用

    - **允许`null`值**:`HashMap`允许一个`null`键和多个`null`值,而`Hashtable`都不允许。 - **迭代器遍历顺序**:`HashMap`的迭代器遍历顺序是不确定的,`Hashtable`也一样。 总结,`Hashtable`是Java中一个基础且...

    HashMapvs.TreeMapvs.Hashtable

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

    java面试笔记.pdf

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

    Java 72 道面试题及答案.docx

    3. Map(映射):键值对集合,键无序、唯一,值可重复,实现类有HashMap、TreeMap、HashTable等。 集合框架的优点: 1. 容量自增长。 2. 提供高性能的数据结构和算法。 3. 可以方便地扩展或改写集合,提高代码复用...

    java编程基础笔记(集合)

    Map接口用于存储键值对,HashMap、TreeMap和Hashtable是最常用的实现。HashMap提供了高效的查找性能,通过哈希表存储键值对,但不保证键的顺序。TreeMap按键的自然顺序或自定义比较器进行排序,而Hashtable是古老的...

    Java集合面试题汇总.pdf

    Map接口则不同于Collection,它是键值对存储的接口,常见的实现类有HashMap、TreeMap、Hashtable、ConcurrentHashMap和Properties。 集合框架的主要优点在于其提供的数据结构和算法。例如,ArrayList和LinkedList...

    Java 72道面试题和答案.docx

    HashMap和TreeMap分别基于哈希表和红黑树,而Hashtable是线程安全的HashMap。 使用集合框架的优点包括: - 容量自增长:集合可以自动扩展其大小以适应更多的元素。 - 高性能的数据结构和算法:集合框架内置了高效的...

    java的hashtable的用法.pdf

    以下是关于`Hashtable`的一些关键知识点: 1. **键值对存储**: `Hashtable`是一个存储键值对的数据结构,每个键是唯一的,且每个键对应一个值。键不能为`null`,但值可以是`null`。 2. **线程安全性**: 与`...

Global site tag (gtag.js) - Google Analytics