Java面向对象
Java异常
Java数组
Java常用类
Java集合
Java IO流
Java线程
Java反射
Socket编程
Java注解开发
Java GoF设计模式
HashMap
Java内存模型
Java线性表

Java中Map基本操作

void:clear() 清空集合中所有的<键,值>对

boolean:containsKey(Object key) 判断是否包含指定的键

boolean:containsValue(Object value) 判断是否包含指定的值

Set>:entrySet() 返回所有Entry的集合, 一个<键,值>对就是一个Entry

boolean:equals(Object o)

V:get(Object key) 返回键对应的值

boolean:isEmpty() 判断集合是否为空

Set:keySet() 返回键的集合

V:put(K key, V value) 添加对, 如果key键已存在,使用value值替换原来的值

void:putAll(Map m) 把m集合中所有的<键,值>对添加到当前集合中

V:remove(Object key) 只要key匹配就删除对应的<键,值>对

default boolean:remove(Object key, Object value) 删除

default V:replace(K key, V value) 使用value值替换key原来的值

int:size() 返回<键,值>对的数

Collection:values() 返回所有值的集合

package com.wkcto.chapter05.map;

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

/**
 * 演示Map的基本操作
 * @author 蛙课网
 *
 */
public class Test01 {

	public static void main(String[] args) {
		//1) 创建Map集合, 用来保存<员工姓名,员工工资>
		//Map是一个接口,需要赋值实现类对象
		Map<String, Integer>  map = new HashMap<>();
		
		//2) 添加数据
		map.put("feifei", 30000);
		map.put("bin", 40000);
		map.put("zhang", 50000);
		map.put("yong", 100000);
		
		//3) 直接打印, 存储顺序与添加顺序可能不一致
		System.out.println( map );
		//{bin=40000, yong=100000, zhang=50000, feifei=30000}
		
		//4)添加重复的键, 如果键重复,会使用新的value值替换原来的值, Map中的键不能重复的
		map.put("bin", 40001);
		System.out.println( map );
		
		//5)修改
		map.replace("feifei", 30002); 
		map.replace("yan", 6666);			//替换时, 如果键不存在,替换不成功
		System.out.println( map );
		
		//6)判断
		System.out.println( map.isEmpty() );
		System.out.println( map.size());
		System.out.println( map.containsKey("feifei"));
		System.out.println( map.containsValue(100000));
		System.out.println( map.get("yong"));
		System.out.println( map.get("cui"));  		//如果键不存在, 返回null
		
		//7) 删除
		map.remove("bin", 40000); 		//删除<"bin", 40000>对,  要求键与值都匹配才能删除
		System.out.println( map ); 		//{bin=40001, yong=100000, zhang=50000, feifei=30002}
		map.remove("yong");				//只要键匹配就删除
		System.out.println( map );
		
	}

}
package com.wkcto.chapter05.map;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/**
 * Map的遍历
 * @author 蛙课网
 *
 */
public class Test02 {

	public static void main(String[] args) {
		//1)创建Map集合
		Map<String, Integer>  map = new HashMap<>();
		
		//2) 添加数据
		map.put("feifei", 30000);
		map.put("bin", 40000);
		map.put("zhang", 50000);
		map.put("yong", 100000);
		
		//3) 获得所有键的集合, 
		Set<String> keySet = map.keySet();
		System.out.println( keySet );
		
		//4) 所有值的集合
		Collection<Integer> values = map.values();
		Iterator<Integer> iterator = values.iterator();
		while (iterator.hasNext()) {
			Integer integer = (Integer) iterator.next();
			System.out.print( integer + "\t");
		}
		System.out.println();
		
		//5)所有entry的集合, 一个Entry就是一个<键,值>对
		Set<Entry<String, Integer>> entrySet = map.entrySet();
		for (Entry<String, Integer> entry : entrySet) {
			System.out.println( entry.getKey() + " : " + entry.getValue());
		}
		
	}

}

练习

package com.wkcto.chapter05.map;

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

/**
 * 统计字符串中每个 字符出现的次数
 * 	a : 12
 * 	c : 5
 * 	d : 23
 * 
 * @author 蛙课网
 *
 */
public class Test03 {

	public static void main(String[] args) {
		String  text = "afdfasfafasfdaczadsfazcvafdfcvfdfdaadvavdavfdaav zcvafdafadfvczxvzvafdafad";
		
		//1) 定义一个Map保存<字符, 出现的次数>结果
		Map<Character, Integer> map = new HashMap<>();
		
		//2) 遍历字符串中的每个 字符
		for( int i = 0  ; i < text.length(); i++){
			char cc = text.charAt(i); 			//取出对应的字符
			//如果字符不是第一次出现, 把原来的次数 加 1
			if ( map.containsKey(cc) ) { 		//Map集合中的键包含cc这个字符
				Integer count = map.get(cc); 	//把cc字符原来的次数取出来
				map.replace(cc, count + 1 ); 	//把cc字符的次数加1, 保存到map中
			}else{
				//如果是第一次出现,  把<字符, 1 > 保存到集合中
				map.put(cc, 1);
			}
		}
		//3) 打印结果
		Set<Entry<Character, Integer>> entrySet = map.entrySet();
		for (Entry<Character, Integer> entry : entrySet) {
			System.out.println( entry.getKey() + " : " + entry.getValue());
		}
	}

}