前一篇我们已经讲过了Collectin是存放单值的最大接口,

  可以看到Map接口和其主要之类的关系图如下:

  快速访问 HashMap    HashTable  TreeMap  Map输出

  那Map就是存放一对值的最大接口。此类的定义如下:

  ·public interface Map<K,V>

  ·K:此映射所维护的键的类型

  ·V:映射值的类型

  Map<K,V>接口中提供的主要方法:

No. 方法 类型 说明
1 public boolean containsKey(Object key) 普通 判断是否含有指定键的元素
2 public boolean containsValue(Object value) 普通 判断是否含有指定值的元素
3 public Set<Map.Entry<K,V>> entrySet() 普通 返回此映射中包含的映射关系的集合
4 public boolean equals(Object o) 普通 判断是否和自指定元素相等
5 public V get(Object key) 普通 根据键值取得指定的值
6 public Set<K> keySet() 普通 取得全部键
7 public V put(K key,V value) 普通 向集合中加入指定键值
8 public void putAll(Map<? extends K,? extends V> m) 普通 向集合中加入指定的一组键值
9 public V remove(Object key) 普通 根据键删除指定键值
10 public int size() 普通 取得集合大小
11 public Collection<V> values() 普通 取得全部值

HashMap<K,V>

此类的定义如下:

public class HashMap<K,V>extends AbstractMap<K,V>implements Map<K,V>, Cloneable, Serializable

此类里允许null的键和值,是非同步的,除此之外和HashTable基本上是相同的。并且是无序的。

实例:

  1. package com.fuwh.map;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Map;
  5.  
  6. public class HashMapTest {
  7.  
  8. public static void main(String[] args) {
  9.  
  10. Map<String,String> hashMap=new HashMap<String,String>();
  11. hashMap.put("1", "张三");
  12. hashMap.put("1", "李四");
  13. hashMap.put("3", "李四");
  14. hashMap.put("2", "王武");
  15. hashMap.put("4", "赵六");
  16.  
  17. System.out.println(hashMap);
  18. }
  19. }

HashTable<K,V>

这个类和Vector是同一时代的。

基本上使用也差不多。

实例:

  1. package com.fuwh.map;
  2.  
  3. import java.util.Hashtable;
  4. import java.util.Map;
  5.  
  6. public class HashTableTest {
  7.  
  8. public static void main(String[] args) {
  9.  
  10. Map<String,String> hashTable=new Hashtable<String,String>();
  11. hashTable.put("1", "张三");
  12. hashTable.put("1", "李四");
  13. hashTable.put("3", "李四");
  14. hashTable.put("2", "王武");
  15. hashTable.put("4", "赵六");
  16.  
  17. System.out.println(hashTable);
  18. }
  19. }

TreeMap

该类是基于红黑树的原理对其按照key的自然顺序排序。

实例:

  1. package com.fuwh.map;
  2.  
  3. import java.util.Map;
  4. import java.util.TreeMap;
  5.  
  6. public class TreeMapTest {
  7.  
  8. public static void main(String[] args) {
  9.  
  10. Map<String,String> treeMap=new TreeMap<String,String>();
  11. treeMap.put("1", "张三");
  12. treeMap.put("1", "李四");
  13. treeMap.put("3", "李四");
  14. treeMap.put("2", "王武");
  15. treeMap.put("4", "赵六");
  16.  
  17. System.out.println(treeMap);
  18. }
  19. }

Map的输出

虽然说集合都应该使用Iterator来输出。但是Map不能直接使用Iterator来输出。因为没有提供iterator()方法。

查看Map接口,可以发现,在此接口中有一个嵌套类,定义如下:

public static interface Map.Entry<K,V>

其实在Map中存放的虽然是键值对,实际上存放的是一个个的Map.Entry对象。

那么,就使用Map.Entry来对Map进行输出。

实例:

  1. package com.fuwh.map;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Iterator;
  5. import java.util.Map;
  6. import java.util.Map.Entry;
  7. import java.util.Set;
  8.  
  9. public class HashMapEntry {
  10.  
  11. public static void main(String[] args) {
  12.  
  13. Map<String,String> hashMap=new HashMap<String,String>();
  14. hashMap.put("1", "张三");
  15. hashMap.put("1", "李四");
  16. hashMap.put("3", "李四");
  17. hashMap.put("2", "王武");
  18. hashMap.put("4", "赵六");
  19. Set<Entry<String,String>> entrySet =hashMap.entrySet();
  20. Iterator<Entry<String,String>> it=entrySet.iterator();
  21. while(it.hasNext()){
  22. Entry<String, String> entry=it.next();
  23. System.out.println(entry.getKey()+"-->"+entry.getValue());
  24. }
  25. }
  26. }

使用foreach输出:

  1. package com.fuwh.map;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Map;
  5.  
  6. public class HashMapForeach {
  7.  
  8. public static void main(String[] args) {
  9.  
  10. Map<String,String> hashMap=new HashMap<String,String>();
  11. hashMap.put("1", "张三");
  12. hashMap.put("1", "李四");
  13. hashMap.put("3", "李四");
  14. hashMap.put("2", "王武");
  15. hashMap.put("4", "赵六");
  16. for(Map.Entry<String, String> entry:hashMap.entrySet()){
  17. System.out.println(entry.getKey()+"-->"+entry.getValue());
  18. }
  19.  
  20. }
  21. }

另一种输出方式:

  1. package com.fuwh.map;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Iterator;
  5. import java.util.Map;
  6. import java.util.Set;
  7.  
  8. public class HashMapOut {
  9.  
  10. public static void main(String[] args) {
  11.  
  12. Map<String,String> hashMap=new HashMap<String,String>();
  13. hashMap.put("1", "张三");
  14. hashMap.put("1", "李四");
  15. hashMap.put("3", "李四");
  16. hashMap.put("2", "王武");
  17. hashMap.put("4", "赵六");
  18. Set<String> keySet1=hashMap.keySet();
  19. Iterator<String> it=keySet1.iterator();
  20. while(it.hasNext()){
  21. String key=it.next();
  22. System.out.println(key+"-->"+hashMap.get(key));
  23. }
  24. }
  25. }

Java集合详解二的更多相关文章

  1. Java集合详解3:Iterator,fail-fast机制与比较器

    Java集合详解3:Iterator,fail-fast机制与比较器 今天我们来探索一下LIterator,fail-fast机制与比较器的源码. 具体代码在我的GitHub中可以找到 https:/ ...

  2. Java集合详解6:这次,从头到尾带你解读Java中的红黑树

    <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...

  3. Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题

    <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...

  4. Java集合详解3:一文读懂Iterator,fail-fast机制与比较器

    <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...

  5. Java集合详解8:Java的集合类细节精讲

    Java集合详解8:Java集合类细节精讲 今天我们来探索一下Java集合类中的一些技术细节.主要是对一些比较容易被遗漏和误解的知识点做一些讲解和补充.可能不全面,还请谅解. 本文参考:http:// ...

  6. Java集合详解6:TreeMap和红黑树

    Java集合详解6:TreeMap和红黑树 初识TreeMap 之前的文章讲解了两种Map,分别是HashMap与LinkedHashMap,它们保证了以O(1)的时间复杂度进行增.删.改.查,从存储 ...

  7. Java集合详解8:Java集合类细节精讲,细节决定成败

    <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...

  8. Java集合详解7:一文搞清楚HashSet,TreeSet与LinkedHashSet的异同

    <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...

  9. Java集合详解2:一文读懂Queue和LinkedList

    <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...

随机推荐

  1. 20162328蔡文琛week07

    学号 2016-2017-2 <程序设计与数据结构>第X周学习总结 教材学习内容总结 多态引用在不同的时候可以指向不同类型的对象. 多态引用在运行时才将方法调用用于它的定义绑定在一起. 引 ...

  2. formidable 表单文件和数据提交

    只要涉及文件上传,那么form标签要加一个属性: <form action="http://127.0.0.1/dopost" method="post" ...

  3. Cypher语法

    cypher是neo4j官网提供的声明式查询语言,非常强大,用它可以完成任意的图谱里面的查询过滤,我们知识图谱的一期项目 基本开发完毕,后面会陆续总结学习一下neo4j相关的知识.今天接着上篇文章来看 ...

  4. MSSQL 2000 错误823恢复

    一.故障描述 MSSQL Server 2000 附加数据库错误823,附加数据库失败.数据库没有备份,不能通过备份恢复数据库,急需恢复数据库中的数据. 二.故障分析SQL Server数据库 823 ...

  5. 新手入门 git

    Git是目前世界上最先进的分布式版本控制系统 特点:高端大气上档次 什么是版本控制系统 系统自动记录文件改动 方便同事协作管理 不用自己管理一堆类似的文件了,也不需要把文件传来传去.如果想查看某次改动 ...

  6. jquery基础总结 -- 转载

    jquery的each里面return的使用 在使用jquery的each方法时, return false相当于break,是跳出each循环,return true相当于continue,是继续循 ...

  7. 快速搭建ssm框架

    快速搭建SSM框架 因为最近有很多朋友问我自己的项目搭建的不够完善,并且经常出现一些小问题,那么今天我又整理了一下文档教大家如何快速搭建SSM框架我是用 eclipse搭建的,如果想用idear的话我 ...

  8. Netty事件监听和处理(上)

    陪产假结束了,今天又开始正常上班了,正好赶上米粉节活动,又要忙上一阵了,米粉节活动时间为4.03 - 4.10,有不少优惠,感兴趣的可以关注mi.com或小米商城app. 今天给大家送了福利:小爱音箱 ...

  9. 命名参数名(含*args , * *kw的区别)

    要限制关键字参数的名字,就可以用命名关键字参数 # coding=utf-8 # 命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数.调用方式如下 def person(name, ...

  10. Mysql 5.1的坑

    1.数据库表是区分大小写的 之前程序在5.7数据库没问题,测试环境上数据库是5.1的,就提示表找不到. 2.同样的sql,在5.1上会提示事务获取锁失败,超时返回.而5.7上正常.原因暂未找到.