前一篇我们已经讲过了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. Struts2学习笔记三 访问servlet

    结果跳转方式 转发 <!-- 转发 --> <action name="Demo1Action" class="cn.itheima.a_result. ...

  2. alpha冲刺第六天

    一.合照 二.项目燃尽图 三.项目进展 主界面首页内容呈现 我的栏目之我的问题完成 我的栏目之我的提问完成 还是插不进去,然后打算先放一放,一直在一个地方纠结那么久脑子太乱 四.明日规划 问答界面问题 ...

  3. C语言博客作业--嵌套循环

    一.PTA实验作业 题目1:7-4 换硬币 2 .设计思路 第一步:定义3个整型变量i,j,k用于循环,定义3个整型变量x,count,total分别用于储存零钱数额,换法个数,硬币数量: 第二步:输 ...

  4. django模型——数据库(二)

    模型--数据库(二) 实验简介 模型的一些基本操作,save方法用于把对象写入到数据库,objects是模型的管理器,可以使用它的delete.filter.all.order_by和update等函 ...

  5. linux 50个常用命令

    1.ls命令 ls是list的缩写,常用命令为ls(显示出当前目录列表),ls -l(详细显示当前目录列表),ls -lh(人性化的详细显示当前目录列表),ls -a(显示出当前目录列表,包含隐藏文件 ...

  6. 小草手把手教你 LabVIEW 串口仪器控制——初识VISA串口

    有些人,学习一样东西时候,喜欢现成的例子.很多人学习一门技术,都喜欢现成的例子开始,比如学单片机的啊,最开始都是修改的例子吧,学语言的也是.最开始都是模仿.这个年头看书上的理论知识太浪费时间了.所以啊 ...

  7. 配置SpringAop时需要用到的AspectJ表达式

    Aspectj切入点语法定义 在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut"切入点" 例如定义切入点表达式  execu ...

  8. 浅谈 ThreadLocal

    有时,你希望将每个线程数据(如用户ID)与线程关联起来.尽管可以使用局部变量来完成此任务,但只能在本地变量存在时才这样做.也可以使用一个实例属性来保存这些数据,但是这样就必须处理线程同步问题.幸运的是 ...

  9. IE bug:ajax请求返回304解决方案

    bug说明: 同一账户下的默认收货地址只有一个,默认收货地址可以修改,修改完成后,使用ajax重新加载收货地址部分. 默认收货地址状态标记:status = 1: 在IE浏览器做了修改后,重新加载的数 ...

  10. MySQL关系表查询两个表的数据

    如下,有四张表:游戏类型表,游戏表,点卡和游戏关系表,点卡表 CREATE TABLE `gamesType`( `tId` INT AUTO_INCREMENT NOT NULL PRIMARY K ...