Map

概述:

​ 集合体系中双列集合的顶层接口,定义了双列集合的共性功能和遍历方式。

​ 双列集合每个位置存放的是一对数据,这对数据就拥有了映射关系

​ Map是一个接口,学习的功能使用实现类使用HashMap来学习

​ HashMap是典型的Map的实现类,学完Map的功能想当于学完了HashMap

特点:

​ 1、存放的是键值对数据

​ 2、无序集合

​ 3、键要唯一

对应关系

映射:一对一的关系

键值对数据:

​ 键:必须保证唯一【一个Map只能有一个键】

​ 值:可以重复【一个map中可以出现多个相同值】

一般使用键来找值

代码示例

import java.util.HashMap;
import java.util.Map;

public class MapDemo {
	public static void main(String[] args) {
		//创建Map对象
		Map<Integer, String> map = new HashMap<Integer, String>();
		//向集合中添加元素
		map.put(1, "张三");
		map.put(2, "李四");
		map.put(3, "王五");
		map.put(4, "赵六");
		
		//打印集合
		System.out.println(map);  //{1=张三, 2=李四, 3=王五, 4=赵六}
	}
}

Map的常用方法

1、put(K k,V v):

存放键值对的数据到集合【也可以修改指定键的值的功能

2、remove(K k):

删除指定键的键值对数据

3、size():

获取map集合的长度【当前调用时的长度】

4、get(K k):

获取指定键的对应的值【根据键获取对应的值】

5、containsKey(Object o):

判断map集合键中是否包含指定的元素

6、containsValue(Object o):

判断map集合值中是否包含指定的元素

代码示例

import java.util.HashMap;
import java.util.Map;

public class MapDemo {
	public static void main(String[] args) {
		//创建Map对象
		Map<Integer, String> map = new HashMap<Integer, String>();
		//向集合中添加元素
		map.put(1, "张三");
		map.put(2, "李四");
		map.put(3, "王五");
		map.put(4, "赵六");
		
		//打印集合
		System.out.println(map); //{1=张三, 2=李四, 3=王五, 4=赵六}
		
		//修改指定键的值
		map.put(2,"Tom"); 
		System.out.println(map); //{1=张三, 2=Tom, 3=王五, 4=赵六}
		
		//删除指定键的键值对数据
		map.remove(2); 
		System.out.println(map); //{1=张三, 3=王五, 4=赵六}
		
		//获取当前集合的长度
		System.out.println(map.size()); //3
		
		//获取指定键的对应值
		System.out.println(map.get(3));  //王五
		
		//判断map集合键中是否包含指定的元素
		boolean boo = map.containsKey(3);
		System.out.println(boo);  //true
		
		//判断map集合值中是否含有指定的元素
		System.out.println(map.containsValue("李四")); //false
		
		
	}
}

Map的遍历方式:

概述:

​ Map集合不能直接遍历,只能把双列集合转变为单列集合进行遍历

方式:

一、键找值

二、键值对

一、键找值方式:( keySet() )

1、想办法找到map集合的所有的键
map集合提供keySet方法,得到map集合的所有键的set集合

2、根据单个的键找对应值
遍历键所在的set集合 过程中通过单个的键找到对应单个值

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapLoopDemo2 {
	public static void main(String[] args) {
		//创建集合
		Map<Integer, String> map = new HashMap<Integer, String>();
		
		//向集合中添加元素
		map.put(1, "一");
		map.put(2, "二");
		map.put(3, "三");
		map.put(4, "四");
		map.put(5, "五");
		
		//遍历集合
		//获取集合的所有key值
		Set<Integer> keySet = map.keySet();
		//遍历所有kay值,并用get()获取每个键对应的值
		for (Integer integer : keySet) {
			System.out.print(map.get(integer) + " "); //一 二 三 四 五 
		}
	}

}

二、键值对方式 : ( entrySet() )

1、把map集合中的键值对数据封装到内部接口对象的属性key和value中,形成一个个键值对对象【把键值对数据变为一个一个键值对对象】

map集合提供一个功能:entrySet(),调用该功能可以得到封装后所有的Entry【键值对】对象所在的Set集合

2、遍历set集合得到每一个键值对对象

3、通过对象的getKey和getValue方法得到对应的键和值

代码示例

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class MapLoopDemo2 {
	public static void main(String[] args) {
		//创建集合
		Map<Integer, String> map = new HashMap<Integer, String>();
		
		//向集合中添加元素
		map.put(1, "一");
		map.put(2, "二");
		map.put(3, "三");
		map.put(4, "四");
		map.put(5, "五");
		
		//获取所有的键值对对象
		Set<Entry<Integer, String>> entrySet = map.entrySet();
		
		//遍历键值对对象集合,获取单个键值对对象
		for (Entry<Integer, String> entry : entrySet) {
			//获取键
			Integer k = entry.getKey();
			//获取值
			String v = entry.getValue();
			System.out.println(k + " : " + v);
			
		}
	}

}
//输出: 
1 :2 :3 :4 :5 :

Map 练习

键盘录入一个字符串,统计每个字符出现的次数
例如:录入qwqw!@!@wzs33zh

打印出来:
@出现了2次
q出现了2次
!出现了2次
s出现了1次
3出现了2次
w出现了3次
h出现了1次
z出现了2次

分析:

​ 使用map集合对多个不同元素进行计数

​ 要记录的元素作为key 元素的个数作为value

计数的原理:

​ 遇到元素看一看计数的map的key中有没有这个元素,

​       没有:把这个元素记录到map集合中

​                  使用put方法添加 【key :元素 value:1】

​       有:意味着元素再一次出现,修改元素的次数【value】

​              修改value:

​                   1、把map记录的旧的value取出来加1

​                   2、重新存入map集合

步骤:

​       1、键盘个字符串

​       2、创建map集合对象用于计数

      ​ 3、想办法获取字符串的每一个字符

​ 方式一:遍历字符串

​ 方式二:把字符串变为字符数组

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;

public class MapScannerDemo {
	public static void main(String[] args) {
		//创建键盘录入对象
		Scanner scanner = new Scanner(System.in);
		
		System.out.println("请输入一个字符串: ");
		String str = scanner.nextLine();
		
		equals(str);
	}
	
	
	//定义一个方法,用来判断字符串中,相同的字符有几个
	public static void equals(String str) {
		//使用map集合用来统计
		//创建集合
		Map<Character, Integer> map = new HashMap<Character, Integer>();
		
		//把字符串转换为字符数组
		char[] charArray = str.toCharArray();
		//遍历字符串,并与集合中对比,看集合中是否存在这个元素
		for (char c : charArray) {
			//存在,则数量加一
			if (map.containsKey(c)) {
				//根据键,获取旧值的次数
				Integer value = map.get(c);
				value++;  //加一
				map.put(c, value); //更新次数
			}else {
				//如果没有,则添加进集合
				map.put(c, 1);
			}
		}
		
		
		//遍历集合
		Set<Entry<Character, Integer>> entrySet = map.entrySet();
		for (Entry<Character, Integer> entry : entrySet) {
			//获取键
			Character key = entry.getKey();
			//获取值
			Integer value = entry.getValue();
			
			System.out.println(key + "出现了" + value + "次");
		}
	}

}

Map 的实现类:

HashMap:

​ 他就是一个典型的Map的实现类没有自己独有的功能和特点,Map集合是什么就是什么。

LinkedHashMap:

​ 是HashMap的子类,功能和HashMap的功能一模一样,但是由无序变为有序

HashMap的key的唯一性

如何保证hashMap的键的唯一性?

要求存放的键的值对应的类必须重写hashCode方法和equals方法

​ 因为HashMap键的存储数据方式和HashSet集合的存储方式是一模一样的。

HashMap和HashSet的关系是?

​ 因为HashSet本身是由HashMap集合构建的,所以唯一性的原理一模 一样

图示
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值