文档章节

Java中的常用Map:HashMap、Hashtable、LinkedHashMap、Tre...

foxeye
 foxeye
发布于 2013/09/30 17:33
字数 690
阅读 423
收藏 5

Java自带了各种Map类,可归为三种类型:

1.通用Map,用于在应用程序中管理映射,通常在 java.util 程序包中实现

  • HashMap
  • Hashtable
  • Properties
  • LinkedHashMap
  • IdentityHashMap
  • TreeMap
  • WeakHashMap
  • ConcurrentHashMap

2.专用 Map,您通常不必亲自创建此类 Map,而是通过某些其他类对其进行访问

  • java.util.jar.Attributes
  • javax.print.attribute.standard.PrinterStateReasons
  • java.security.Provider
  • java.awt.RenderingHints
  • javax.swing.UIDefaults

3.一个用于帮助实现您自己的 Map 类的抽象类

  • AbstractMap

我们今天主要来认识java.util包中的HashMap、Hashtable、LinkedHashMap、TreeMap。

Hashmap:

  • 最常用的Map
  • 根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度
  • 遍历时取得数据的顺序是完全随机的
  • 最多只允许一条记录的键为Null,允许多条记录的值为 Null
  • 不支持线程的同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致
  • 使用用 Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap

Hashtable:

  • 与 HashMap类似
  • 它继承自Dictionary类
  • 不允许记录的键或者值为空
  • 支持线程的同步,即任一时刻只有一个线程能写Hashtable
  • 线程同步导致Hashtable在写入时会比较慢

LinkedHashMap:

  • HashMap的一个子类
  • 保存了记录的插入顺序
  • 先进先出,遍历时先得到的记录是先插入的,可以在构造时用带参数,按照应用次数排序
  • 在遍历的时候会比HashMap慢。
  • 例外情况,当HashMap容量很大,实际数据较少时,遍历起来可能会比 LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关

TreeMap:

  • 实现SortMap接口
  • 默认是按键值的升序排序,也可以指定排序的比较器
  • 当用Iterator 遍历TreeMap时,得到的记录是排过序的

 

总结:

  • 用的最多的是HashMap,在Map 中插入、删除和定位元素,HashMap 是最好的选择
  • 按自然顺序或自定义顺序遍历键,那么TreeMap会更好
  • 出的顺序和输入的相同,那么用LinkedHashMap 可以实现,可以按读取顺序来排列

 

参考:

© 著作权归作者所有

共有 人打赏支持
foxeye
粉丝 19
博文 81
码字总数 17049
作品 0
海淀
程序员
HashMap vs. TreeMap vs. Hashtable vs.LinkedHashMap

Map概览 Java SE中有四种常见的Map实现——HashMap, TreeMap, Hashtable和LinkedHashMap。如果我们使用一句话来分别概括它们的特点,就是: HashMap就是一张hash表,键和值都没有排序。 Tree...

markGao
2014/01/23
0
0
LinkedHashMap和HashMap的比较使用

LinkedHashMap和HashMap的比较使用 由于现在项目中用到了LinkedHashMap,并不是太熟悉就到网上搜了一下。 运行结果如下: LinkedHashMap 6=apple 3=banana 2=pear HashMap* 2=pear 6=apple 3...

smilezhuolin
07/03
0
0
LinkedHashMap和HashMap的比较使用

由于现在项目中用到了LinkedHashMap,并不是太熟悉就到网上搜了一下。 ? 运行结果如下: LinkedHashMap 6=apple 3=banana 2=pear HashMap* 2=pear 6=apple 3=banana 分析:LinkedHashmap 的特点...

zhwj407906450
2012/10/22
0
0
java中关于Map的九大问题

通常来说,Map是一个由键值对组成的数据结构,且在集合中每个键是唯一的。下面就以K和V来代表键和值,来说明一下java中关于Map的九大问题。 0、将Map转换为List类型 在java中Map接口提供了三...

LCZ777
2014/08/11
0
0
HashMap和Hashtable的区别

HashMap和Hashtable的比较是Java面试中的常见问题,用来考验程序员是否能够正确使用集合类以及是否可以随机应变使用多种思路解决问题。HashMap的工作原理、ArrayList与Vector的比较以及这个问...

LCZ777
2014/03/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java动态代理之InvocationHandler最简单的入门教程

网上关于Java的动态代理,Proxy和InvocationHandler这些概念有讲解得非常高深的文章。其实这些概念没有那么复杂。现在咱们通过一个最简单的例子认识什么是InvocationHandler。值得一提的是,...

JerryWang_SAP
7分钟前
0
0
oracle 在 MyBatis 中使用 like

两种使用方法 使用oracle自带 || 拼凑的方式 <if test="userName!=null and userName!=''"> AND u.USER_NAME like '%' || #{userName} || '%' </if> 使用MyBatis的$符号的方式 <if test="us......

karma123
12分钟前
0
0
带接口的webservice方式发布

package cn.it.ws.e;import javax.jws.WebService;/** * 面向接口的webservice发布方式 * @author Administrator * */@WebServicepublic interface JobService {publi...

江戸川
28分钟前
0
0
day122-20181020-英语流利阅读-待学习

蜘蛛侠新片《毒液》来袭!导演灵感来自哪? Roxy 2018-10-20 1.今日导读 你还记得漫威宇宙中飞檐走壁的蜘蛛侠小可爱吗?在刚过去的国庆黄金周里,索尼影业发行的漫威超级英雄蜘蛛侠系列大片《...

飞鱼说编程
38分钟前
2
0
美团点评Docker容器管理平台

美团点评容器平台简介 本文介绍美团点评的Docker容器集群管理平台(以下简称“容器平台”)。该平台始于2015年,是基于美团云的基础架构和组件而开发的Docker容器集群管理平台。目前该平台为...

Skqing
44分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部