Map 用于保存具有映射关系的数据,集合里会保存两组值,一组用于保存Map里的key,一组用于保存Map里的value,key与map可以是任何引用类型数据。Map的key不允许重复。key与value是单向的一一对应关系,即通过key值总能找到唯一确定的value。

1 Map常用方法

  • void clear():清除Map集合里的所有元素
  • boolean containsKey(Object key):查询Map是否包含指定的key,包含则返回true
  • Set entrySet():返回Map中包含key-value对所组成的Set集合,每个集合元素都是Map.Entry对象
  • Object get(Object key):返回指定key所对应的value,如果此Map不包含此key,返回null
  • Set keySet():返回该Map中所有key组成的Set集合
  • Object put(Object key, Object value):添加一个key-value对,如果key已经存在,则会覆盖
  • void putAll(Map m):将指定的Map集合复制到本Map
  • Object remove(Object key):删除指定key对应的key-value对
  • int size():返回Map元素的个数
  • Collection values():返回Map里所有value组成的Collection

  

  2 HashMap 与Hashtable

HashMap与Hashtable都是Map接口的实现类,它们之间的关系类似与ArrayList与Vector:Hashtable是一个古老的Map实现类,从JDK1.0就有了,从它的命名就可以看出,甚至没有遵循Java命名规范。

  • Hashtable是线程安全的,HashMap不是,所以HashMap性能要好些
  • Hashtable不允许使用null作为key与value,HashMap可以,但是也只能存储一个null作为key值
  • HashMap是无序的

  

         HashMap<String, String> hash = new HashMap<String, String>();
hash.put("吴国谋士", "周瑜");
hash.put("蜀国军师", "诸葛亮");
hash.put("魏国谋士", "郭嘉"); //foreach遍历
for(Object key:hash.keySet())
{
String name = hash.get(key);
System.out.println(key+"-->"+name);
} //Iterator遍历
Iterator iter = hash.keySet().iterator();
while(iter.hasNext())
{
String key = (String)iter.next();
String name = hash.get(key);
System.out.println(key+"-->"+name);
} //将HashMap转为Set,Set里存储的是Map.Entry<K, V>
Set set = hash.entrySet();
Iterator iter1 = set.iterator(); while(iter1.hasNext())
{
Map.Entry<String, String> item = (Map.Entry<String, String>)iter1.next();
System.out.print(item.getKey()+"-->"+item.getValue()+" ");
}

HashMap中存储、获取对象,其中用作key的对象必须实现hashCode方法与equals方法,类似与HashSet,HashMap判断两个key值相等的标准也是:两个key 通过equals()比较返回true,那么两个key的hashCode值也相等。相对key的判断,value的判断就要简单些,两个value只需要通过equals()比较返回true即可。

关于HashSet,HashMap的equals()与hashCode()重写:http://www.cnblogs.com/Latiny/p/8359088.html

3 LinkedHashMap

LinkedHashMap是HashMap的子类,类似于LinkedHashSet,也是使用双向链表来维护key-value对的次序(其实只需要考虑key的次序),该链表负责维护Map的迭代顺序,迭代顺序与key-value插入顺序一致。LinkedHashMap可以避免对HashMap里的key-value对进行排序,同时又可避免使用TreeMap所增加的成本。由于它需要维护元素的插入顺序,因此性能略低于HashMap,但是因为它以链表来维护内部顺序,所以在迭代访问Map里的全部元素时有较好的性能。

         LinkedHashMap map = new LinkedHashMap();
map.put("Lakers", "KOBE");
map.put("Celtics", "Irving");
map.put("Warries", "KD");
map.put("Cavaliers", "James"); Iterator iter= map.keySet().iterator();
while(iter.hasNext())
{
String key = (String)iter.next();
System.out.println(key+"-->"+map.get(key)); } for(Object key:map.keySet())
{
System.out.println(key+"-->"+map.get(key));
}

  输出结果:

Lakers-->KOBE
Celtics-->Irving
Warries-->KD
Cavaliers-->James

可以看到LinkedHashMap遍历的顺序是插入时的顺序,与HashMap截然不同,HashMap遍历的结果是无序的。

  

  4 TreeMap

TreeMap与TreeSet类似,也是一个红黑树结构。每个key-value对作为红黑树的一个节点。TreeMap存储key-value对时,需要根据key对节点进行排序。TreeMap可以保证所有key-value对处于有序状态。TreeMap额外提供了一系列根据key值访问key-value的方法

Map.Entry() firstEntry():返回该Map中最小key所对应的key-value对,如果该Map为空,则返回null

Map.Entry() lastEntry():返回该Map中最大key所对应的key-value对,如果该Map为空,则返回null

Object firstKey():返回该Map中最小的key值

Object lastKey():返回该Map中最大的key值

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

  1. Java | Map集合

    Map集合 在现实生活中,有非常多的东西,是和另外一种东西对应的,并且还是唯一的,比如:身份证号与个人,个人与手机,一夫一妻...等,这种关系就是对应关系,又叫做映射.Java为这种数据类型提供了专门 ...

  2. java Map集合对比分析

    1.Map:Map是所有map集合的顶级父接口,用于key/value形式的键值对,其中每一个key都映射到一个值,key不能重复. 2.TreeMap:该map将存储的键值对进行默认排序,并且还能够 ...

  3. java之集合工具类Collections

    Collections类简介 java.utils.Collections 是集合工具类,用来对集合进行操作.此类完全由在 collection 上进行操作或返回 collection 的静态方法组成 ...

  4. Java Map集合 遍历 五种方式(包含 Lambda 表达式遍历)

    示例代码如下: package com.miracle.luna.lambda; import java.util.HashMap; import java.util.Iterator; import ...

  5. java map集合的知识

    /** * Map用于存储键值对,不允许键重复,值可以重复. * (1)HashMap是一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度. * H ...

  6. Java Map集合按照key和value排序之法

    一.理论基点 Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等. TreeMap:基于红黑树(Red-Black-Tre ...

  7. java的集合工具类Collections

    集合框架的工具类. Collections:集合框架的工具类.里面定义的都是静态方法. Collections和Collection有什么区别? Collection是集合框架中的一个顶层接口,它里面 ...

  8. Java学习笔记之:Java Map集合

    一.介绍 通常来说,Map是一个由键值对组成的数据结构,且在集合中每个键是唯一的. 二.笔记 /** * Map:接口. 不是collection的子类 key -value 键值对 key唯一不能重 ...

  9. Java map的匿名类的初始化

    可以直接使用: Map<String, Object> testMap = new HashMap<String, Object>() { { put("test1& ...

随机推荐

  1. (转)Spring Boot 2 (五):Docker Compose + Spring Boot + Nginx + Mysql 实践

    http://www.ityouknow.com/springboot/2018/03/28/dockercompose-springboot-mysql-nginx.html 我知道大家这段时间看了 ...

  2. C#基础の迭代器详解

    一.什么是迭代器 迭代器(iterator)有时又称游标(cursor)是程序设计的软件设计模式,可在容器(container,例如链表或阵列)上遍访的接口,设计人员无需关心容器的内容. 迭代器模式是 ...

  3. springcloud(十五):Spring Cloud 终于按捺不住推出了自己的服务网关 Gateway

    Spring 官方最终还是按捺不住推出了自己的网关组件:Spring Cloud Gateway ,相比之前我们使用的 Zuul(1.x) 它有哪些优势呢?Zuul(1.x) 基于 Servlet,使 ...

  4. centos7修改系统语言为简体中文

    centos7修改系统语言为简体中文 说明 自己装系统时一般都可以自定义选择系统语言.可是云端服务器一般都是安装好的镜像,默认系统语言为英文,对于初学者可能还会有搞不懂的计算机词汇.这里简单说一下ce ...

  5. sql优化的几种方法

    在sql查询中为了提高查询效率,我们常常会采取一些措施对查询语句进行sql优化,下面总结的一些方法,有需要的可以参考参考. 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 ord ...

  6. 07 Python初学(元组)

    tuple:    元组被称为只读列表,即数据可以被查询,但不能被修改,列表的切片操作同样适用于元组. 元组写在小括号()里,元素之间用逗号隔开 虽然 tuple 的元素不可改变,但他可以包含可变的对 ...

  7. windows下彻底删除jenkins

    1.在控制面板中选择卸载jenkins 2.重启电脑 3.找到“.jenkins”(在C盘寻找) 4.删除“.jenkins” 5.是否要删除环境变量?(目前没删除) 6.jenkins再安装使用的是 ...

  8. 从String.valueOf(null)说起

    同学在群问String.valueOf(null)返回啥,我看了下源码,返回"null"啊,   public static String valueOf(Object obj) ...

  9. AJAX请求返回HTTP 400 错误 - 请求无效 (Bad request)

    在ajax请求后台数据时有时会报HTTP400错误-请求无效(Badrequest);出现这个请求无效报错说明请求没有进入到后台服务里: 原因: 1)前端提交数据的字段名称或者是字段类型和后台的实体类 ...

  10. .NET Core中延迟单例另一种写法【.NET Core和.NET Framework的beforefieldinit差异】

    1.BeforeFieldInit是什么 前段时间在反编译代码时无意间看到在类中有一个BeforeFieldInit特性,处于好奇的心态查了查这个特性,发现这是一个关于字段初始化时间的特性[提前初始化 ...