前一篇我们已经讲过了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基本上是相同的。并且是无序的。

实例:

package com.fuwh.map;

import java.util.HashMap;
import java.util.Map; public class HashMapTest { public static void main(String[] args) { Map<String,String> hashMap=new HashMap<String,String>();
hashMap.put("1", "张三");
hashMap.put("1", "李四");
hashMap.put("3", "李四");
hashMap.put("2", "王武");
hashMap.put("4", "赵六"); System.out.println(hashMap);
}
}

HashTable<K,V>

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

基本上使用也差不多。

实例:

package com.fuwh.map;

import java.util.Hashtable;
import java.util.Map; public class HashTableTest { public static void main(String[] args) { Map<String,String> hashTable=new Hashtable<String,String>();
hashTable.put("1", "张三");
hashTable.put("1", "李四");
hashTable.put("3", "李四");
hashTable.put("2", "王武");
hashTable.put("4", "赵六"); System.out.println(hashTable);
}
}

TreeMap

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

实例:

package com.fuwh.map;

import java.util.Map;
import java.util.TreeMap; public class TreeMapTest { public static void main(String[] args) { Map<String,String> treeMap=new TreeMap<String,String>();
treeMap.put("1", "张三");
treeMap.put("1", "李四");
treeMap.put("3", "李四");
treeMap.put("2", "王武");
treeMap.put("4", "赵六"); System.out.println(treeMap);
}
}

Map的输出

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

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

public static interface Map.Entry<K,V>

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

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

实例:

package com.fuwh.map;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; public class HashMapEntry { public static void main(String[] args) { Map<String,String> hashMap=new HashMap<String,String>();
hashMap.put("1", "张三");
hashMap.put("1", "李四");
hashMap.put("3", "李四");
hashMap.put("2", "王武");
hashMap.put("4", "赵六");
Set<Entry<String,String>> entrySet =hashMap.entrySet();
Iterator<Entry<String,String>> it=entrySet.iterator();
while(it.hasNext()){
Entry<String, String> entry=it.next();
System.out.println(entry.getKey()+"-->"+entry.getValue());
}
}
}

使用foreach输出:

package com.fuwh.map;

import java.util.HashMap;
import java.util.Map; public class HashMapForeach { public static void main(String[] args) { Map<String,String> hashMap=new HashMap<String,String>();
hashMap.put("1", "张三");
hashMap.put("1", "李四");
hashMap.put("3", "李四");
hashMap.put("2", "王武");
hashMap.put("4", "赵六");
for(Map.Entry<String, String> entry:hashMap.entrySet()){
System.out.println(entry.getKey()+"-->"+entry.getValue());
} }
}

另一种输出方式:

package com.fuwh.map;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set; public class HashMapOut { public static void main(String[] args) { Map<String,String> hashMap=new HashMap<String,String>();
hashMap.put("1", "张三");
hashMap.put("1", "李四");
hashMap.put("3", "李四");
hashMap.put("2", "王武");
hashMap.put("4", "赵六");
Set<String> keySet1=hashMap.keySet();
Iterator<String> it=keySet1.iterator();
while(it.hasNext()){
String key=it.next();
System.out.println(key+"-->"+hashMap.get(key));
}
}
}

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. 巨人大哥谈Web应用中的Session(session详解)

    巨人大哥谈Web应用中的Session(session详解) 虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能正确的应用这一技术. ...

  2. Access数据库跨库查询及记录集区分

    医疗设备软件一般都是单机软件,如果是Windows平台,常会选择Access数据库存储结构化数据,因为他轻量,便于部署.然而随着医疗信息化的发展,医生希望对多台单机设备的数据进行管理,采用网络数据库当 ...

  3. 20162328蔡文琛week04

    学号 20162328 <程序设计与数据结构>第4周学习总结 教材学习内容总结 本周学习了第四章和第七章,第四章中的内容已经有了初步定的掌握,布尔表达式的运用,是条件和循环语句的基础及数组 ...

  4. 基于scrapy爬虫的天气数据采集(python)

    基于scrapy爬虫的天气数据采集(python) 一.实验介绍 1.1. 知识点 本节实验中将学习和实践以下知识点: Python基本语法 Scrapy框架 爬虫的概念 二.实验效果 三.项目实战 ...

  5. Twisted 安全信道

    1.安装python的SSL插件pyOpenSSL pip install pyopenssl 2.安装OpenSSL工具包 sudo apt-get install openssl sudo apt ...

  6. Node入门教程(5)第四章:global 全局变量

    global - 全局变量 全局对象(global object),不要和 全局的对象( global objects )或称标准内置对象混淆.这里说的全局的对象是说在全局作用域里的内的对象.全局作用 ...

  7. (function(root,factory){})(this,function($){}) 一个立即执行的匿名函数自调

    因为新公司用到ocx 我就开始看原来的代码 无意中发现这个 可能原来比较low吗(虽然现在也很low吧)没发现这个东东 还可以这样写 于是乎我开始了探索 完整代码如下 HTML <div id= ...

  8. 泛型的 typeof

    static void Main(string[] args) { TestTypeOf<string>(); Console.ReadKey(); } static void TestT ...

  9. 新概念英语(1-27)Mrs. Smtih's living room

    Where are the books? Mrs. Smtih's living room is large. There is a television in the room. The telev ...

  10. Tomcat(1-1)重置Tomcat8.5管理员的用户名和密码

    1.访问 http://localhost:8080/,点击 [manager app],提示输入用户名和密码,admin/admin后报错.  2.解决办法:重置Tomcat8.5管理员的用户名和密 ...