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

刚开始看到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得到的记录是排过序的。

时间: 2024-08-10 00:07:46

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

[Java] HashMap、TreeMap、Hashtable排序

Java中对Map(HashMap,TreeMap,Hashtable等)的排序时间 首先简单说一下他们之间的区别: HashMap: 最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度.HashMap最多只允许一条记录的键为Null(多条会覆盖);允许多条记录的值为 Null.非 首先简单说一下他们之间的区别: HashMap: 最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度.HashMap

HashMap vs. TreeMap vs. Hashtable vs. LinkedHashMap

HashMap vs. TreeMap vs. Hashtable vs. LinkedHashMap Map is one of the most important data structures. In this tutorial, I will show you how to use different maps such as HashMap, TreeMap, HashTable and LinkedHashMap. Map是数据结构中非常重要的一种.在该文章中,我将会告诉你如何去使

HashMap Hashtable LinkedHashMap 和TreeMap

java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap. Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复. HashMap是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的. HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;

【Simple Java】HashMap vs TreeMap vs Hashtable vs LinkedHashMap

Map是一个重要的数据结构,本篇文章将介绍如何使用不同的Map,如HashMap,TreeMap,HashTable和LinkedHashMap. Map概览 Java中有四种常见的Map实现,HashMap,TreeMap,HashTable和LinkedHashMap,我们可以使用一句话来描述各个Map,如下: HashMap:基于散列表实现,是无序的: TreeMap:基于红黑树实现,按Key排序: LinkedHashMap:保存了插入顺序: Hashtable:是同步的,与HashMa

Java 对比Hashtable、Hashmap、Treemap有什么不同?(正在整理学习中)

Hashtable.Hashmap.Treemap都是最常见的一些Map实现,是以键值对的形式存储和操作数据的容器类型. Hashtable是Java类库提供的一个哈希实现,本身是同步的,不支持null键和null值,由于同步导致性能开销,所以已经很少被推荐使用. HashMap是应用更加广泛的哈希表实现,行为上大致与HashTable一致,主要区别在于HashMap不是同步的,支持null键和null值等.通常情况下HashMap进行get和put操作可以达到常数时间的性能,所以它是绝大部分利

HashMap与TreeMap源码分析

1. 引言     在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Java这么久,也写过一些小项目,也使用过TreeMap无数次,但到现在才明白它的实现原理).因此本着"不要重复造轮子"的思想,就用这篇博客来记录分析TreeMap源码的过程,也顺便瞅一瞅HashMap. 2. 继承结构 (1) 继承结构 下面是HashMap与TreeMap的继承结构: pu

java学习笔记——Java中HashMap和TreeMap的区别深入理解

本文转载自Java中HashMap和TreeMap的区别深入理解 首先介绍一下什么是Map.在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value.这就是我们平时说的键值对. HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的). HashMap 非线程安全 

java该HashTable,HashMap和HashSet

同一时候我们也对HashSet和HashMap的核心方法hashcode进行了具体解释,见<探索equals()和hashCode()方法>. 万事俱备,那么以下我们就对基于hash算法的三个集合HashTable,HashSet和HashMap具体解释. 本文文件夹: 1. HashTable和HashMap的差别 2. HashSet和HashMap的差别 3. HashMap,HashSet工作原理 4. HashSet工作原理 5. 常见问题 1. HashTable和HashMap的

java中的HashTable,HashMap和HashSet

目录(?)[+] 上篇博客中我们详细的分析了java集合<java中Map,List与Set的区别>. 同时我们也对HashSet和HashMap的核心方法hashcode进行了详解,见<探索equals()和hashCode()方法>. 万事俱备,那么下面我们就对基于hash算法的三个集合HashTable,HashSet和HashMap详解. 本文目录: 1. HashTable和HashMap的区别 2. HashSet和HashMap的区别 3. HashMap,HashS