博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第2章 HashMap集合
阅读量:5942 次
发布时间:2019-06-19

本文共 7095 字,大约阅读时间需要 23 分钟。

1.1 Map接口概述

我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图。
A:Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储
B:Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。
C:Collection中的集合称为单列集合,Map中的集合称为双列集合。
需要注意的是,Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。

1.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<K> keySet() :将Map中所有的键装到Set集合中返回
Collection<V> values():返回集合中所有的value的值的集合
1.2.1 案例代码六:

package com.itheima_01;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
> entrySet() * * * Set
keySet() * Collection
values() */public class MapDemo2 {public static void main(String[] args) {//创建Map对象Map
map = new HashMap
();//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);}}

1.2.2 案例代码七:

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

1.3 Map的两种遍历方式1.3.1 利用keySet()方法遍历

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

1.3.2 利用entrySet()方法遍历

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

1.3.3 练习:

A:以key为学号字符串,value为学生姓名存入HashMap集合,分别以两种方式遍历集合
1.3.3.1 案例代码八:

package com.itheima_02;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
hm = new HashMap
();//添加映射关系hm.put("ITCAST001", "张三");hm.put("ITCAST002", "李四");hm.put("ITCAST003", "王五");hm.put("ITCAST003", "赵六");//遍历Map对象//方式1 获取所有的key,通过key来获取valueSet
keys = hm.keySet();for (String key : keys) {String value = hm.get(key);System.out.println(key + "=" + value);}System.out.println("------------------");//方式2:获取所有的结婚证对象,然后通过结婚证对象获取丈夫和媳妇Set
> entrys = hm.entrySet();for (Map.Entry
entry : entrys) {String key = entry.getKey();String value = entry.getValue();System.out.println(key + "=" + value);}}}B: 定义一个学生类,学生类中有name和age两个属性,创建三个学生对象,分别对name和age赋值,然后以key为学生对象,value为学生的学号的方式存入```HashMap集合,利用两种方式遍历这个Map1.3.3.2 案例代码九:

package com.itheima_02;

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来获取value
    Set<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);
    }
    }
    }

    1.4 可变参数1.4.1 知识概述当参数不确定的时候, 类型要明确Java可以把多个参数直接帮我们转成数组

理解: 可变参数本质就是一个长度可变的数组.

格式:

实参: 一个参数一个参数的传递    形参: 类型…变量名

1.4.2 注意

在可变参数之后不可以再追加参数
参数的数量定义, 可以给多个甚至也可以一个都不不给
1.4.3 案例代码十:

Public static int getSum(int…num){int sum = 0;for(int i = 0; i < num.length; i++){sum+=num[i];}r[/i]eturn sum;}

转载于:https://blog.51cto.com/13517854/2097264

你可能感兴趣的文章
微会动微信现场互动:2019年会展和活动产业的发展趋势
查看>>
java架构师,必须掌握的几点技术?
查看>>
iis
查看>>
Linux之systemctl命令的使用
查看>>
Java程序员从阿里面试回来,这些面试题你们会吗?
查看>>
文件管理小知识
查看>>
2018-11-05直播
查看>>
一个锁等待现象的诊断案例
查看>>
代理流程
查看>>
反向区域DNS解析服务
查看>>
怎么注册今日头条?哪里可以直接购置?
查看>>
各类操作系统的TTL字段值
查看>>
RabbitMQ分布式集群架构
查看>>
Mac最好用的文献管理软件EndNote X9
查看>>
Oracle 重做日志简介
查看>>
Oracle可以处理LOB字段的常用字符函数
查看>>
Oracle RMAN 还原与恢复(一)--还原服务器参数文件
查看>>
linux 下修改日期和时间
查看>>
CentOS安装tomcat
查看>>
[Java] HashMap 源码简要分析
查看>>