1- Map接口概述

我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同:

  1. Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储
  2. Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。
  3. Collection中的集合称为单列集合,Map中的集合称为双列集合。
    需要注意的是,Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。

2- Map常用功能

A:映射功能:
V put(K key, V value) :以键=值的方式存入Map集合
B:获取功能:
V get(Object key):根据键获取值
int size():返回Map中键值对的个数
C:判断功能:
boolean containsKey(Object key):判断Map集合中是否包含键为key的键值对
boolean containsValue(Object value):判断Map集合中是否包含值为value键值对
boolean isEmpty():判断Map集合中是否没有任何键值对
D:删除功能:
void clear():清空Map集合中所有的键值对
V remove(Object key):根据键值删除Map中键值对
E:遍历功能:
Set<Map.Entry<K,V>> entrySet():将每个键值对封装到一个个Entry对象中,再把所有Entry的对象封装到Set集合中返回
Set keySet() :将Map中所有的键装到Set集合中返回
Collection values():返回集合中所有的value的值的集合

代码示例一:

import java.util.HashMap;
import java.util.Map;/**    Map的常用功能:*       映射功能:*               V put(K key, V value) *         获取功能:*               V get(Object key) *                 int size() *        判断功能:*               boolean containsKey(Object key) boolean containsValue(Object value) boolean isEmpty() *         删除功能:*               void clear()  *                 V remove(Object key)  * *       遍历功能:*               Set<Map.Entry<K,V>> entrySet() * * *            Set<K> keySet()  *            Collection<V> values()  */
public class MapDemo2 {public static void main(String[] args) {//创建Map对象Map<String,String> map = new HashMap<String,String>();//V put(K key, V value) :就是将key映射到value,如果key存在,则覆盖value,并将原来的value返回System.out.println(map.put("ITCAST001", "张三"));System.out.println(map.put("ITCAST002", "李四"));System.out.println(map.put("ITCAST001", "王五"));//void clear() : 清空所有的对应关系  //map.clear();//V remove(Object key) :根据指定的key删除对应关系,并返回key所对应的值,如果没有删除成功则返回null//System.out.println(map.remove("ITCAST005"));//boolean containsKey(Object key) : 判断指定key是否存在//System.out.println(map.containsKey("ITCAST003"));//boolean containsValue(Object value):判断指定的value是否存在//System.out.println(map.containsValue("王五"));//boolean isEmpty() : 判断是否有对应关系//System.out.println(map.isEmpty());//int size() : 返回对应关系的个数//System.out.println(map.size());//V get(Object key) : 根据指定的key返回对应的valueSystem.out.println(map.get("ITCAST002"));System.out.println(map);}
}

代码示例二:

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;/**    Set<K> keySet()  *    Collection<V> values() */
public class MapDemo3 {public static void main(String[] args) {//创建Map对象Map<String,String> map = new HashMap<String,String>();//添加映射关系map.put("ITCAST001", "张三");map.put("ITCAST002", "李四");map.put("ITCAST005", "李四");//Set<K> keySet() : 以Set的形式获返回所有的keySet<String> keys = map.keySet();for (String key : keys) {System.out.println(key);}System.out.println("-----------");//Collection<V> values() :Collection<String> values = map.values();for (String value : values) {System.out.println(value);}}
}

3- Map的两种遍历方式

3.1- 利用keySet()方法遍历

import java.util.HashMap;
import java.util.Map;
import java.util.Set;/**    Map的第一种遍历方式:*            首先召集所有的丈夫*          遍历所有的丈夫*            获取每一个丈夫*            让每一个丈夫去找他自己的媳妇*/
public class MapDemo4 {public static void main(String[] args) {//创建Map对象Map<String,String> map = new HashMap<String,String>();//添加映射关系map.put("谢婷疯", "张箔纸");map.put("陈关西", "钟欣桶");map.put("李亚碰", "王飞");//遍历Map对象//首先召集所有的丈夫Set<String> keys = map.keySet();//遍历所有的丈夫for (String key : keys) {//让每个丈夫去找他自己的媳妇就可以了String value = map.get(key);System.out.println("丈夫:" + key + "---" + "媳妇:" + value);}}
}

3.2- 利用entrySet()方法遍历

import java.util.HashMap;
import java.util.Map;
import java.util.Set;/**    Map的第二种遍历方式:*        通过结婚证对象来获取丈夫和媳妇* *  class 结婚证<K,V> {*     K 丈夫;*      V 媳妇;*  *   public 结婚证(K 丈夫,V 媳妇) {*         this.丈夫 = 丈夫;*         this.媳妇 = 媳妇;*     }*  *  *    public K get丈夫() {*         return 丈夫;*     }*  *   public V get媳妇() {*         return 媳妇;*     }*  }*  *  *  class Entry<K,V> {*     K key;*     V value;*  *    public Entry(K key,V value) {*       this.key = key;*       this.value = value;*   }*  *  *    public K getKey() {*        return key;*    }*  *   public V getValue() {*          return value;*      }*  }*  *  Set<Map.Entry<K,V>> entrySet()  * */
public class MapDemo5 {public static void main(String[] args) {//创建Map对象Map<String,String> map = new HashMap<String,String>();//添加映射关系map.put("尹志平", "小龙女");map.put("令狐冲", "东方菇凉");map.put("玄慈", "叶二娘");//获取所有的结婚证对象Set<Map.Entry<String,String>> entrys = map.entrySet();//遍历包含了结婚证对象的集合for (Map.Entry<String, String> entry : entrys) {//获取每个单独的结婚证对象//通过结婚证对象获取丈夫和媳妇String key = entry.getKey();String value = entry.getValue();System.out.println("丈夫:" + key + "---" + "媳妇:" + value);}}
}

4- 练习

以key为学号字符串,value为学生姓名存入HashMap集合,分别以两种方式遍历集合

import java.util.HashMap;
import java.util.Map;
import java.util.Set;/** * 使用HashMap存储数据并遍历(字符串作为key)* */
public class HashMapDemo {public static void main(String[] args) {//创建Map对象HashMap<String,String> hm = new HashMap<String,String>();//添加映射关系hm.put("ITCAST001", "张三");hm.put("ITCAST002", "李四");hm.put("ITCAST003", "王五");hm.put("ITCAST003", "赵六");//遍历Map对象//方式1 获取所有的key,通过key来获取valueSet<String> keys = hm.keySet();for (String key : keys) {String value = hm.get(key);System.out.println(key + "=" + value);}System.out.println("------------------");//方式2:获取所有的结婚证对象,然后通过结婚证对象获取丈夫和媳妇Set<Map.Entry<String, String>> entrys = hm.entrySet();for (Map.Entry<String, String> entry : entrys) {String key = entry.getKey();String value = entry.getValue();System.out.println(key + "=" + value);}}
}

定义一个学生类,学生类中有name和age两个属性,创建三个学生对象,分别对name和age赋值,然后以key为学生对象,value为学生的学号的方式存入HashMap集合,利用两种方式遍历这个Map

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/** * 使用HashMap存储数据并遍历(自定义对象作为key)* */
public class HashMapDemo2 {public static void main(String[] args) {//创建Map对象HashMap<Student,String> hm = new HashMap<Student,String>();//创建key对象Student s = new Student("zhangsan",18);Student s2 = new Student("lisi",20);Student s3 = new Student("lisi",20);//添加映射关系hm.put(s, "ITCAST001");hm.put(s2, "ITCAST002");hm.put(s3, "ITCAST002");//遍历Map对象//方式1: 获取所有的key,通过key来获取valueSet<Student> keys = hm.keySet();for (Student key : keys) {String value = hm.get(key);System.out.println(key + "=" + value);}System.out.println("-----");//方式2:获取所有结婚证对象,通过结婚证对象获取丈夫和媳妇Set<Map.Entry<Student, String>> entrys = hm.entrySet();for (Entry<Student, String> entry : entrys) {Student key = entry.getKey();String value = entry.getValue();System.out.println(key + "=" + value);}}
}

JAVA笔记- JAVA集合类之HashMap集合相关推荐

  1. 【java笔记】Map,HashMap,Collections

    5.1 Map的概述和使用 package demo11Map;import java.util.HashMap; import java.util.Map;public class Demo01Ma ...

  2. Java笔记-Java日常笔记-Java核心语言-史上最全Java笔记-Java烂笔头-实时更新(~v~)

    阿一的日常Java笔记,实时更新,有什么问题可以留言交流一下,大家一起共同进步!!! 1.Java基础 1.1.基本语法 1.1.1.关键字 ​ 定义:被java赋予特殊含义的字符串(单词): ​ 关 ...

  3. Java笔记——Java多线程~

    多线程 内容来自博客~ 理解线程与进程 进程 进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程:进程也是程序的一次执行过程,是系统运行程序的基本单位 ...

  4. Java笔记(七)HashMap和HashSet

    HashMap和HashSet 一)HashMap 1.Map接口 interface Map<K,V> {int size();//查看Map中的键值对个数boolean isEmpty ...

  5. JAVA笔记- JAVA集合类之ArrayList详解

    1- 集合概述 A) 面向对象编程语言对事物的描述都是通过对象来体现的. 为了方便对多个对象进行操作,我们就必须对这多个对象进行存储,而要想对多个对象进行存储,就不能是一个基本的变量,而应该是一个容器 ...

  6. Java中常用集合类对比_集合比较

    集合实现类 集合接口 有序性 唯一性 线程安全 空值 性能 排序 数据结构 索引 应用场景 备注 ArrayList List 有序 可重复 不安全 允许空值 查找效率高,添加/删除效率低 使用 Co ...

  7. think in java i o_5.[Think in Java笔记]Java IO系统

    1.输入输出 InputStream和OutputStream是面向字节的,Reader和Write则面向字符的且兼容Unicode. InputStream类型 ByteArrayInputStre ...

  8. java访问控制度_菜鸡的Java笔记 - java 访问控制权限

    java中四种访问控制权限的使用 内容 在java里面一共定义有四个权限,按照由小到大的顺序:private 那么这四种访问控制权限的特点如下 NO 范围 private defaule protec ...

  9. Java笔记——Java代码块的执行顺序

    Java代码块的执行顺序 Java程序中代码块的执行顺序对于学习Java的人来说是必不可少需要掌握的. 代码块 在Java中,使用{}括起来的代码被称为代码块. 根据其位置和声明的不同,可以分为: 局 ...

最新文章

  1. 如何在CentOS/RHEL 7上借助ssm管理LVM卷?
  2. 关于举办第十五届全国大学生智能汽车竞赛浙江赛区选拔赛的通知(草案)
  3. CCNA考试的一点体会
  4. [USACO15JAN]草鉴定Grass Cownoisseur
  5. Binary Watch二进制时间
  6. 利用keepalived和haproxy配置mysql的高可用负载均衡
  7. Linux gdb 破解软件密码
  8. python数据分析准备_使用Python进行数据分析I 环境准备
  9. Python 简单网页爬虫学习
  10. python输出字符_python输出字符
  11. POCO库中文编程参考指南(11)如何使用Reactor框架?
  12. 2018年9月28号-10月9号
  13. [中级01]java为什么能跨平台,而C\C++语言不能跨平台
  14. 机器学习笔记(七):线性回归 | 凌云时刻
  15. 双击java安装包没有反应_雨林木风Win7下双击JER安装包没有反应的解决技巧
  16. Multisim入门
  17. html5转ipk,OpenWrt更新ipk教程
  18. hp服务器安装系统分区,hp 服务器分区
  19. Agth 辅助工具(GAL用agth进行自动翻译工具)
  20. MATLAB 3d实时,MATLAB 3D 动画制作(三)- 实时随动3D动画设计

热门文章

  1. SQL获取某月第一天或最后一天
  2. WordPress中文汉字用户名不能注册怎么办?
  3. 名帖77 刘弘珪 楷书《金刚般若波罗蜜经》
  4. 大像素图像目标检测的解决方案
  5. Image1000优秀网络简介(目-标-分-类)
  6. Aspose.Slides使用教程:使用 C++ 访问或修改 PowerPoint 文件的属性
  7. 转:无视苹果 Adobe欲将Flash推广到iPhone
  8. AD PCB打印1:1
  9. 国内安装Chrome上的扩展插件(通过Edge扩展插件)
  10. 魅族android10内测答案,魅族Flyme9内测答案