Map类

Map

概述:
集合体系中双列集合的顶层接口,定义了双列集合的共性功能和遍历方式。​双列集合每个位置存放的是一对数据,这对数据的关系为映射。
Map是一个接口,学习的功能使用实现类使用HashMap来学习HashMap是的Map典型的实现类,学完Map的功能相当于学完了HashMap。

特点:

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

​ 2、无序集合

​ 3、键值唯一

映射:一对一的关系。

键值对数据:

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

​ 值:可以重复【一个map中可以出现多个相同值】一般使用键来找值。

代码示例:

package com.ujiuye.demo;

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

public class HashMapDemo {

	public static void main(String[] args) {
		Map<String, String> map = new HashMap<String, String>();
		map.put("大郎","金莲");
		map.put("庆庆","金莲");
		map.put("宝宝","蓉蓉");
		map.put("喆喆","蓉蓉");
		map.put("亮亮","露露");
		map.put("平西王","露露");
		System.out.println(map);
	}
}

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集合值中是否包含指定的元素
代码示例:


package com.ujiuye.demo;
import java.util.HashMap;
import java.util.Map;

public class HashMapDemo {

	public static void main(String[] args) {
		Map<String, String> map = new HashMap<String, String>();
		map.put("大郎","金莲");
		map.put("庆庆","金莲");
		map.put("宝宝","蓉蓉");
		map.put("喆喆","蓉蓉");
		map.put("亮亮","露露");
		map.put("平西王","露露");
		System.out.println(map);
		map.put("大郎","王婆");
		System.out.println(map);
		System.out.println(map.size());// 6
		// 删除指定键的键值对数据
		map.remove("喆喆");
		System.out.println(map);
		System.out.println(map.size());// 5
		
		System.out.println(map.get("庆庆"));// 金莲
		
		System.out.println(map.containsKey("涛涛"));// false
		System.out.println(map.containsKey("大郎"));// true
		
		System.out.println(map.containsValue("百合"));// false
		System.out.println(map.containsValue("六婆"));// false
	}
	}

Map的遍历方式:

概述:

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

方式:

​ 键找值

​ 键值对

1、键找值方式:

1、想办法找到map集合的所有的键

​ map集合提供了keySet方法 得到map集合的所有键的set集合

2、根据单个的键找对应值

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

代码示例:
package com.ujiuye.demo;

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

public class MapLoopDemo {

public static void main(String[] args) {
	Map<String, String> map = new HashMap<String, String>();
	map.put("大郎","金莲");
	map.put("庆庆","金莲");
	map.put("宝宝","蓉蓉");
	map.put("喆喆","蓉蓉");
	map.put("亮亮","露露");
	map.put("平西王","露露");
	
	// 键找值遍历
	// 获取map集合所有的key
	Set<String> keySet = map.keySet();
	// 遍历set集合 通过单个键找到对应的值
	for (String key : keySet) {
		String value = map.get(key);
		
		System.out.println(key + " : " + value);
	}
}
}

2、键值对方式

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

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

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

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

代码示例

package com.ujiuye.demo;

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

public class MapLoopDemo {

public static void main(String[] args) {
	Map<String, String> map = new HashMap<String, String>();
	map.put("大郎","金莲");
	map.put("庆庆","金莲");
	map.put("宝宝","蓉蓉");
	map.put("喆喆","蓉蓉");
	map.put("亮亮","露露");
	map.put("平西王","露露");
	// 键值对遍历
	// 获取所有的键值对对象
	Set<Entry<String,String>> entrySet = map.entrySet();
	//  遍历键值对对象集合获取单个的键值对对象
	for (Entry<String, String> entry : entrySet) {
		// 通过对象的getKey和getValue 方法获取键和值
		String key = entry.getKey();
		String value = entry.getValue();
		System.out.println(key + " = " + value);
	}
}
}

Map 练习

键盘录入一个字符串,统计每个字符出现的次数

例如:录入aaaabbccddd!@#@#$@#$%cc66ff

打印出来:a 有 4 个,b 有 2 个,c 有 4 个,d 有 3 个,! 有 1 个,@ 有 3 个,$ 有 2 个,% 有 1 个,6 有 2个,f 有 2 个,

分析:

​ 使用map集合对多个不同元素进行计数,要记录的元素作为key,元素的个数作为value

​ 计数的原理:

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

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

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

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

​ 修改value:

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

​ 2、重新存入map集合

步骤:

​ 1、键盘个字符串

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

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

​ 方式一:遍历字符串

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

代码示例:

package com.ujiuye.demo;

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

public class MapText {

public static void main(String[] args) {
	// 1、键盘录入字符串
	Scanner sc = new Scanner(System.in);
	System.out.println("请输入一个字符串:");
	String str = sc.nextLine();
	// 2、创建map集合对象用于计数
	HashMap<Character,Integer> map = new HashMap<Character, Integer>();

	// 3、想办法获取字符串的每一个字符
		// 方式一:遍历字符串
		// 方式二:把字符串变为字符数组
	
		char[] cs = str.toCharArray();
		// 遍历数组
		for (char c : cs) {
			// 看一看map集合的key有没有这个字符
			if (map.containsKey(c)) {
				// 有 更新次数
				Integer value = map.get(c);// 获取旧的次数
				value++;// 加1
				map.put(c, value);// 更新次数
			}else {
				// 没有 存入map集合
				map.put(c, 1);
			}
		}
		// 处理完毕  遍历map集合就可以知道每一个不同字符出现的次数
		Set<Entry<Character,Integer>> entrySet = map.entrySet();
		for (Entry<Character, Integer> entry : entrySet) {
			Character c = entry.getKey();
			Integer count = entry.getValue();
			System.out.println(c + "出现了" + count + "次,");
		}
}
}

Map 的实现类:

HashMap:

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

LinkedHashMap:

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

HashMap的key的唯一性

如何保证hashMap的键的唯一性?
要求存放的键的值对应的类必须重写hashCode方法和equals方法

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

​ HashMap和HashSet的关系是?

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值