【JavaSE】集合(二)————Map集合,HashMap集合,遍历,集合嵌套等

1. Map集合的概述和使用

Map集合概述:

  • Interface <K,V> K:键的类型; V:值的类型
  • 将键映射到值的对象;不能包含重复的键;每个键可以映射到最多一个值
  • 举例:学生的学号和姓名
学号(K)姓名(V)
201925463小明
201925464小张
201925465小美

导包:

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

创建Map集合的对象:

  • 多态的方式
  • 具体的实现类HashMap
Map<String,String> map = new HashMap<String,String>();
map.put("001","小明"); //将指定的值与该映射中的指定键相关联
map.put("002","小明");
map.put("002","小张");
//以上map中只有两对元素(001小明,002小张),因为键的唯一性,map.put("002","小张")动作用002小张覆盖了002小明

2. Map集合的基本功能

方法名说明
V put(K key,V value)添加元素
V remove(Object key)根据键删除键值对元素,返回值
void clear()移除所有键值对元素
boolean containsKey( Object key )判断集合是否包含指定的键
boolean containsValue(Object value)判断集合是否包含指定的值
boolean isEmpty()判断集合是否为空
int size()集合的长度,也就是集合中键值对的个数

3. Map集合的获取功能

方法名说明
V get(Object key)根据键获取值
Set < K> keySet()获取所有键的集合
Collection< V> values()获取所有值的集合
Set< Map.Entry< K,V>> entrySet()获取所有键值对象的集合
Map<String,String> map = new HashMap<String,String>();

Set< String> keySet = map.keySet();
for(String key : keySet)
	System.out.println(key);
	
Collection< String> values = map.values();
for(String value : values)
	System.out.println(value);	

4. Map集合的遍历

方式1:

  1. 用Set< K > keySet(),把Map集合中所有的key取出来存储到Set集合中
  2. 使用迭代器/增强for遍历Set集合,用get(key)
Map<String,String> map = new HashMap<String,String>();
Set<String> set = map.KeySet();
for(String s : set) {
	String key = s;
	String value = map.get(s);

方式2:

  1. 获取所有键值对对象集合,用 Set < Map.Entry < K,V>> entrySet() : 获取所有键值对对象的集合
  2. 遍历键值对对象集合,得到每一个键值对对象,用增强for实现得到每一个Map.Entry
  3. 根据键值对对象获取键和值,用getKey()得到键,用getValue()得到值
Map<String,String> map = new HashMap<String,String>();
Set<Map.Entry<String,String>> entrySet = map.entrySet();
for(Map.Entry<String,String> me : entrySet) {
	String key = me.getKey();
	String value = me.getValue();
}

5. 集合嵌套

1.用ArrayList集合存储HashMap元素并遍历

//创建ArrayList集合
ArrayList<HashMap<String,String>> array = new ArrayList<>();
//创建HashMap集合,并添加键值对元素
HashMap<String,String> hm1 = new HashMap<String,String>();
hm1.put("1","one");
hm1.put("2","two");
//把HashMap集合作为元素添加到ArrayList集合
array.add(hm1);
HashMap<String,String> hm2 = new HashMap<String,String>();
hm2.put("1","一");
hm2.put("2","二");
//把HashMap集合作为元素添加到ArrayList集合
array.add(hm2);
HashMap<String,String> hm3 = new HashMap<String,String>();
hm3.put("1","yi");
hm3.put("2","er");
//把HashMap集合作为元素添加到ArrayList集合
array.add(hm3);
//遍历ArrayList集合
for(HashMap<String,String> hm : array) {
	Set<String> keySet = hm,keySet();
	for(String key : keySet) {
		String value = hm.get(key);
		System.out.println(key + "," + value);
	}
}

2.HashMap集合存储ArrayList元素并遍历

//创建HashMap集合
HashMap<String,ArrayList<String>> hm = new HashMap<>();
//创建ArrayList集合,并添加元素
ArrayList<String> sgyy = new ArrayList<String>();
sgyy.add("诸葛亮");
sgyy.add("赵云");
//把ArrayList作为元素添加到HashMap集合中
hm.put("三国演义",sgyy);

ArrayList<String> xyj = new ArrayList<String>();
sgyy.add("孙悟空");
sgyy.add("唐曾");
//把ArrayList作为元素添加到HashMap集合中
hm.put("西游记",xyj);

ArrayList<String> shz= new ArrayList<String>();
sgyy.add("武松");
sgyy.add("鲁智深");
//把ArrayList作为元素添加到HashMap集合中
hm.put("水浒传",shz);

//遍历HashMap集合
Set<String> keySet = hm.keySet();
for(String key : keySet) {
	System.out.println(key);
	ArrayList<String> value = hm.get(key);
	for(String s : value) {
		System.out.println("\t" + s);
	}
}	

执行结果:

水浒传
武松
鲁智深
三国演义
诸葛亮
赵云
西游记
唐曾
孙悟空

案例:统计字符串中每个字符出现的次数

public class HashMapDemo{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个字符串");
		String line = sc.nextLine();

		//创建HashMap集合,键是Character,值是Integer
		HashMap<Character,Integer> hm = new HashMap<>();

		//遍历字符串,得到每一个字符
		for(int i = 0; i< line.length(); i++){
			char key = line.charAt();

			//拿到的每一个字符作为键到HashMap集合中去找对应的值,看其返回值
			Integer value = hm.get(key);
			if(value == null) {
				//如果返回值是null,说明字符在HashMap集合中不存在,就把该字符作为键,1作为值存储
				hm.put(key,1);
			} else {
				//如果返回值不是null,说明该字符在HashMap集合中存在,把该值加1,然后重新存储该字符和对应的值
				value++;
				hm.put(key,value);
			}
		}
		//遍历HashMap集合,得到键和值,按照要求进行拼接
		StringBuilder sb = new StringBuilder();
		Set<Character> keySet = hm.keySet();
		for(Character key: keySet) {
			Integer value = hm.get(key);
			sb.append(key).append("(").append(value).append(")");
		}
		String result = sb.toString();
		System.out.println(result);
	}
}

执行结果:

请输入一个字符串:
aaabacddbca
:
a(5)d(2)b(2)c(2)

注:HashMap中的元素没有顺序,通过上面的执行结果就能看出来。如果想把结果排序,可以把HashMap改成TreeMap,TreeMap用法跟HashMap一样,只是多了一个对元素的排序(这里的排序是它默认排序,可以改,我之间的文章有说到)
用TreeMap之后执行结果:

请输入一个字符串:
loveyou
:
e(1)l(1)o(2)u(1)v(1)y(1)

是的,没错,是按照字母字典顺序排序的。如果元素是整数的话,就是按照自然数的顺序排序。



主页还有更多Javase相关的笔记,欢迎大家指点评论

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值