美文网首页
Java集合框架(十一)—— Map小结

Java集合框架(十一)—— Map小结

作者: Sandy_678f | 来源:发表于2018-12-23 15:51 被阅读0次
image.png

综述
(01) Map 是“键值对”映射的抽象接口。
(02) AbstractMap 实现了Map中的绝大部分函数接口。它减少了“Map的实现类”的重复编码。
(03) SortedMap 有序的“键值对”映射接口。
(04) NavigableMap 是继承于SortedMap的,支持导航函数的接口。
(05) HashMap, Hashtable, TreeMap, WeakHashMap这4个类是“键值对”映射的实现类。它们各有区别!
HashMap是基于“拉链法”实现的散列表。一般用于单线程程序中。
Hashtable也是基于“拉链法”实现的散列表。它一般用于多线程程序中。
TreeMap是有序的散列表,它是通过红黑树实现的。它一般用于单线程中存储有序的映射。

比较
相同点:
HashMap和Hashtable都是存储“键值对(key-value)”的散列表,而且都是采用拉链法实现的。
存储的思想都是:通过table数组存储,数组的每一个元素都是一个Entry;而一个Entry就是一个单向链表,Entry链表中的每一个节点就保存了key-value键值对数据。
添加key-value键值对:首先,根据key值计算出哈希值,再计算出数组索引(即,该key-value在table中的索引)。然后,根据数组索引找到Entry(即,单向链表),再遍历单向链表,将key和链表中的每一个节点的key进行对比。若key已经存在Entry链表中,则用该value值取代旧的value值;若key不存在Entry链表中,则新建一个key-value节点,并将该节点插入Entry链表的表头位置。
删除key-value键值对:删除键值对,相比于“添加键值对”来说,简单很多。首先,还是根据key计算出哈希值,再计算出数组索引(即,该key-value在table中的索引)。然后,根据索引找出Entry(即,单向链表)。若节点key-value存在与链表Entry中,则删除链表中的节点即可。
异同点:
1 继承和实现方式不同
HashMap 继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。
Hashtable 继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口。

2 线程安全不同
Hashtable的几乎所有函数都是同步的,即它是线程安全的,支持多线程。
而HashMap的函数则是非同步的,它不是线程安全的。

3 对null值的处理不同
HashMap的key、value都可以为null。
Hashtable的key、value都不可以为null。
当HashMap的key为null时,HashMap会将其固定的插入table[0]位置(即HashMap散列表的第一个位置);而且table[0]处只会容纳一个key为null的值,当有多个key为null的值插入的时候,table[0]会保留最后插入的value。


image.png

4 支持的遍历种类不同
HashMap只支持Iterator(迭代器)遍历。
而Hashtable支持Iterator(迭代器)和Enumeration(枚举器)两种方式遍历。

5 容量的初始值 和 增加方式都不一样

HashMap默认的容量大小是16;增加容量时,每次将容量变为“原始容量x2”。
Hashtable默认的容量大小是11;增加容量时,每次将容量变为“原始容量x2 + 1”。

6 添加key-value时的hash值算法不同

HashMap添加元素时,是使用自定义的哈希算法。
Hashtable没有自定义哈希算法,而直接采用的key的hashCode()。

7 部分API不同

相关文章

  • Java集合框架(十一)—— Map小结

    综述(01) Map 是“键值对”映射的抽象接口。(02) AbstractMap 实现了Map中的绝大部分函数接...

  • 集合相关问题

    Java有哪些集合框架?Java的集合框架主要包括两个集合类型的容器:集合(Collection)和图(Map)。...

  • Java 集合

    1 java集合的接口框架集合的接口框架 Java集合分为Collections和Map两大种。 2 Colle...

  • Java集合框架

    1. java集合框架图 Java 集合框架主要包括两种类型的容器:集合(Collection)与图(Map),C...

  • java集合相关学习

    java集合框架解读 Java集合框架继承Collection和map两个接口,Collection的子类有Lis...

  • 集合2

    Java集合框架成员:Collection系列,Map系列,Iterator系列。Collection、Map:盛...

  • Map映射集合

    Map集合框架:java.util.Map :1、定义:具有 key(键)-value(值)映射关系的集合。2、M...

  • Java中的集合

    所有集合都在java.util包下 Collection和Map是Java集合框架的根接口 Collections...

  • Java 集合框架分析

    Java 集合框架 包括Collection接口 和Map 接口 Collection集合 Set List Qu...

  • 【Java】【集合框架】集合框架(map)

    集合框架(map接口) Map是双列集合的根接口,Collection是单列集合的根接口 Map的键是唯一的,Co...

网友评论

      本文标题:Java集合框架(十一)—— Map小结

      本文链接:https://www.haomeiwen.com/subject/kbcbhqtx.html