Map的继承关系:

Map接口的常用实现类:

1、HashMap、Hashtable(t是小写)

HashMap不是线程安全的,key、value的值都可以是null。

Hashtable是线程安全的,key、value的值都不能是null。

HashMap、Hashtable都是无序的。

如果要使用自定义的类(未继承Java自带的类)作为key,需要重写自定义类的hashCode()、equals()来保证集合中没有重复的key。类名中含hash的集合,都要这样。

因为不必保证线程安全,所以HaspMap性能比Hashtable略高。

Hashtable是很古老的一个类,命名不规范,问题较多。尽量少用Hashtable。即使要创建线程安全的Map,也尽量不要使用Hashtable,可以使用Collections工具类把HashMap变成线程安全的。

2、LinkedHashMap

LinkedHashMap是HashMap的子类,使用一个双向链表来维护键值对的顺序(与添加顺序相同),维护的是key的顺序。

存储、查找仍是使用hashCode值来索引,遍历(迭代)才使用链表,就是说遍历时的顺序和添加元素的顺序相同。

因为内部维护了一个链表,所以查找、存储时HashMap性能高于LinkedHashMap,但遍历集合时LinkedHashMap性能较好。

3、Properties

Properties是Hashtable的子类,在处理属性文件时特别方便。Properties的key、value都必须是String。

Properties类的常用方法:

String getProperty(String key)

String getProperty(String key,String defaultValue)   key不存在时,把默认的值作为value返回

Object setProperty(String key,String value)   设置属性值。相当于Hashtable的put()

void  load(InputStream is)   从属性文件(输入流)中加载键值对到Properties对象

void store(OutputStream os,String info)   把properties中的键值对写到输出流中(一般是属性文件)。第二个参数是对properties信息的说明。

实例:

 Properties properties=new Properties();
properties.setProperty("name","张三");
//key、value都必须是String
properties.setProperty("age","19");
//输出键值对到属性文件,一行一个键值对。第二个参数是对文件所保存信息的说明,会以注释形式输出到属性文件的首行。a.ini默认在项目的根目录下。
properties.store(new FileOutputStream("a.ini"),"student info");
//properties中仍有键值对
System.out.println(properties); //{name=张三, age=19}

4、TreeMap

TreeMap类是Map接口的子接口SortedMap的实现类,用红黑树来存储元素,保持集合的有序(并不是添加顺序,而是按key的值排列)。

TreeMap的2中排序方式:自然排序(默认)、定制排序。

TreeMap的键值对(其实是key)总是处于有序状态,调用keySet()获取key的Set,再使用toArray()转化为数组,这个数组就是有序的。

5、EnumMap

EnumMap的key都必须是同一个枚举类的实例,元素的排列顺序与枚举类中的顺序保持一致。

性能分析:

EnumMap无需维护什么,性能最好。

TreeMap一般要比HashMap、Hashtable要慢,尤其是添加、删除键值对时,因为内部维护红黑树开销很大。

Hashtable线程安全,所以HashMap性能要高于Hashtable。而Hashtable问题较多,一般不使用。

LinkedHashMap内部要维护一个链表,所以HashMap性能一般要高于LinkedHashMap。HashMap底层采用数组存储键值对,查询效率极高。大量删除元素、遍历集合时,LinkedHashMap性能较好。

Properties专门用于操作属性文件。

Map集合的实现类的更多相关文章

  1. map集合类型/实体类类型的参数

    map集合类型的参数 若mapper接口中的方法需要的参数为多个时,此时可以手动创建map集合, 将这些数据放在map中 只需要通过${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要 ...

  2. Java基础知识强化之集合框架笔记58:Map集合之LinkedHashMap类的概述

    1. LinkedHashMap类的概述 LinkedHashMap:Map接口的哈希表(保证唯一性) 和 链接(保证有序性)列表实现,具有可预知的迭代顺序. 2. 代码示例: package cn. ...

  3. JAVA基础学习之 Map集合、集合框架工具类Collections,Arrays、可变参数、List和Set集合框架什么时候使用等(4)

    package com.itcast.test20140113; import java.util.ArrayList; import java.util.Arrays; import java.ut ...

  4. Java Map 集合实现类

    Map 用于保存具有映射关系的数据,集合里会保存两组值,一组用于保存Map里的key,一组用于保存Map里的value,key与map可以是任何引用类型数据.Map的key不允许重复.key与valu ...

  5. Map集合、HashMap集合、LinkedHashMap集合、Hashtable集合、Collections工具类和模拟斗地主洗牌和发牌

    1.Map集合概述和特点 * A:Map接口概述  * 查看API可以知道:          * 将键映射到值的对象          * 一个映射不能包含重复的键          * 每个键最多 ...

  6. day07(Set接口,HashSet类,hashcoad(),Collections工具类,Map集合)

    Set接口 set接口的实现类特点 1.无序(取出来的顺序和存进去的数据的顺序不一致) 2.唯一(数据不能存相同的) 底层是用Map集合写的 HashSet类  实现了  set接口       唯一 ...

  7. (1)Map集合 (2)异常机制 (3)File类 (4)I/O流

    1.Map集合(重点)1.1 常用的方法 Set<Map.Entry<K,V>> entrySet() - 用于将Map集合转换为Set集合. 其中Map.Entry<K ...

  8. Collections工具类、Map集合、HashMap、Hashtable(十八)

    1.Map集合概述和特点 * A:Map接口概述 * 去重复, * 查看API可以知道, * 将键映射到值的对象, * 一个映射不能包含重复的键, * 每个键最多只能映射到一个值.* B:Map接口和 ...

  9. Map 集合 和 String 字符串相互转换工具类

    package com.skynet.rimp.common.utils.util; import java.util.Arrays; import java.util.HashMap; import ...

随机推荐

  1. android adb 源码框架分析(1 系统)【转】

    本文转载自:http://blog.csdn.net/luansxx/article/details/25203269 ‘ Adb模块包括adb,adbd,源代码都在system/core/adb目录 ...

  2. Oracle:热备时,突然断电情况处理

    我们在热备时,如果此时突然停电,再次启动时会发生什么情况呢? SQL> alter tablespace users begin backup; Tablespace altered. SQL& ...

  3. os、sys和shutil模块

    运行环境:python3 OS模块:os 模块提供了一个统一的操作系统的接口函数 下面的path指路径的意思 os.stat(file) #查询文件属性操作 os.sep #取代操作系统特定的路径分隔 ...

  4. maven实战(6)-- pom.xml的编写

    pom.xml中可以编写的东西确实挺多的,经常看到别人写的pom文件中出现了一些没见过plugin或properties等等,不知有何作用,其实很简单,只要参看maven的官方文档即可:http:// ...

  5. [Selenium] 使用Chrome Driver 的示例

    //导入Selenium 库和 ChromeDriver 库 pachage com.learningselenium.simplewebdriver; import java.util.concur ...

  6. wireshark分析ssl协议

    1.什么是ssl SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种 ...

  7. mysql负载均衡方案

    mysql负载均衡方案 一.直接连接 数据库的读写分离方案很多,这里介绍基于mysql数据库的读写分离方案. 比较常见的读写分离方案如下: 1 基于查询分离 最简单的分离方法是将读和写分发到主和从服务 ...

  8. 3.11-3.15 HDFS HA

    一.背景 1. Hadoop2.0之前,在HDFS集群中NameNode存在单点故障(SPOF).对于只有一个NameNode的集群, 若NameNode机器出现故障,则整个集群将无法使用,直到Nam ...

  9. C++笔试题库之编程、问答题 100~150道

    101. winsock建立连接的主要实现步骤? 答: 服务器端:socket()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接, accept()发现有客户端连 ...

  10. hihoCoder搜索二·骑士问题

    #include <stdio.h> #include <string.h> #include <math.h> #include <algorithm> ...