32.Map集合

Map集合

1.Map集合概述
  • Map接口概述
    查看API可以知道:
    将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值

  • B:Map接口和Collection接口的不同
    Map是双列的,Collection是单列的
    Map的键唯一,Collection的子体系Set是唯一的
    Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效

package heima_day18;

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

public class Demo1_Map {
	/**
 	A:Map集合的功能概述
	* a:添加功能
		* V put(K key,V value):添加元素。
			* 如果键是第一次存储,就直接存储元素,返回null
			* 如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
	* b:删除功能
		* void clear():移除所有的键值对元素
		* V remove(Object key):根据键删除键值对元素,并把值返回
	* c:判断功能
		* boolean containsKey(Object key):判断集合是否包含指定的键
		* boolean containsValue(Object value):判断集合是否包含指定的值
		* boolean isEmpty():判断集合是否为空
	* d:获取功能
		* Set<Map.Entry<K,V>> entrySet():
		* V get(Object key):根据键获取值
		* Set<K> keySet():获取集合中所有键的集合
		* Collection<V> values():获取集合中所有值的集合
	* e:长度功能
		* int size():返回集合中的键值对的个数
	 */
	public static void main(String[] args) {
		//Demo_a();	
		//Demo_b();
		Map<String, Integer>map = new HashMap<String, Integer>();
		map.put("abc",23);
		map.put("aaa",23);
		map.put("bbb",23);
		map.put("ccc",23);
		
		Collection<Integer> c = map.values();
		System.out.println(c);
		System.out.println(map.size());
	}

	private static void Demo_b() {
		Map<String, Integer>map = new HashMap<String, Integer>();
		map.put("abc",23);
		map.put("aaa",23);
		map.put("bbb",23);
		map.put("ccc",23);
		
		//Integer value = map.remove("abc");//根据键删除元素,返回对应的元素
		//System.out.println(value);
		System.out.println(map.containsKey("abc"));//判断是否包含传入的键
		System.out.println(map.containsKey(111));//判断是否包含传入的值
		System.out.println(map);
	}

	private static void Demo_a() {
		Map<String, Integer>map = new HashMap<String, Integer>();
		Integer i1 = map.put("abc",23);
		Integer i2 = map.put("aaa",23);
		Integer i3 = map.put("bbb",23);
		Integer i4 = map.put("ccc",23);
		Integer i5 = map.put("abc",27);//相同的键不存储,被覆盖的值返回
		System.out.println(map);
		System.out.println(i1);
		System.out.println(i2);
		System.out.println(i3);
		System.out.println(i4);
		System.out.println(i5);
	}

}

双列集合如何迭代?

第一种

package heima_day18;

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

public class Demo2_Map_Iterator {
	/**
	 * 通过看Map api发现没有Iterator,那双列集合如何迭代呢?
	 * *第一种迭代思路
	 *  A:键找值思路:
	 	* 获取所有键的集合
	 	* 遍历键的集合,获取到每一个键
	 	* 根据键找值
	 */
	public static void main(String[] args) {
		Map<String, Integer>map = new HashMap<String, Integer>();
		map.put("abc",23);
		map.put("aaa",24);
		map.put("bbb",25);
		map.put("ccc",26);
		
		Integer i = map.get("abc");//根据键获取值
		System.out.println(i);
		
		//获取所以的键
		Set<String> keySet = map.keySet(); //获取所有键的集合
		Iterator<String> it = keySet.iterator();//获取迭代器
		while(it.hasNext()) {//判断集合中是否有元素
			String key = it.next();//获取每一个键
			Integer value = map.get(key);//根据键获取值
			System.out.println(key+"---"+value);
		}
		//增强for循环迭代双列集合
		for (String key : map.keySet()) {//map.keySet()是所有键的集合
			System.out.println(key+"==="+map.get(key));
		}
	}

}

第二种

package heima_day18;

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

public class Demo3_Map_Iterator {
	/**
	 * 第二种迭代思路
	 * * A:键值对对象找键和值思路:
	 	* 获取所有键值对对象的集合
	 	* 遍历键值对对象的集合,获取到每一个键值对对象
	 	* 根据键值对对象找键和值
	 */
	public static void main(String[] args) {
		Map<String, Integer>map = new HashMap<String, Integer>();
		map.put("abc",23);
		map.put("aaa",24);
		map.put("bbb",25);
		map.put("ccc",26);
		//Map.Entry说明Entry是Map的内部接口,将键和值封装成了Entry对象,并存储在Set集合中
		Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
		//获取每一个对象
		Iterator<Map.Entry<String, Integer>> it = entrySet.iterator();
		while(it.hasNext()) {
			//获取每一个entry对象
			Map.Entry<String, Integer> en = it.next();
			String key = en.getKey();//根据键值对对象获取键
			Integer value = en.getValue();//根据键值对对象获取值
			System.out.println(key+"==="+value);
		}
		
		for (Map.Entry<String, Integer> en : map.entrySet()) {
			System.out.println(en.getKey()+"----"+en.getValue());
		}
	}

}

2.HashMap
package heima_day18;

import java.util.HashMap;

import heima_day18_bean.Student;

public class Demo4_HashMap {
	/**
	 * * A:案例演示
	* HashMap集合键是Student值是String的案例
	 * 键是学生对象,代表每一个学生
	 * 值是字符串对象,代表学生归属地
	 */
	public static void main(String[] args) {
		HashMap<Student, String> hm = new HashMap<>();
		hm.put(new Student("张三",23),"北京");
		hm.put(new Student("张三",24),"上海");
		hm.put(new Student("王五",25),"深圳");
		hm.put(new Student("赵六",26),"广州");
		System.out.println(hm);
	}

}
3.LinkedHashMap

import java.util.LinkedHashMap;



public class Demo5_LinkedHashMap {

     /**

           * LinkedHashMap的特点

           * 底层是链表实现的可以保证怎么存就怎么取

      */

     public static void main(String[] args) {

           LinkedHashMap<String, Integer> lhm = new 
LinkedHashMap<String, Integer>();

           lhm.put("aaa", 23);

           lhm.put("bbb", 24);

           lhm.put("ccc", 25);

           lhm.put("ddd", 26);

           System.out.println(lhm);

     }



}
4.TreeMap
package heima_day18;

import java.util.TreeMap;

import heima_day18_bean.Student;

public class Demo6_TreeMap {
	/**
	 * * A:案例演示
	 * TreeMap集合键是Student值是String的案例
	 */
	public static void main(String[] args) {
			Demo1();
			/**
			TreeMap<Student, String> tm = new TreeMap<>(new Comparator<Student>() {
				public int compare(Student s1, Student s2) {
					int num =s1.getName().compareTo(s2.getName());
					return num == 0 ? s1.getAge() -s2.getAge():num;
				}
			});
			tm.put(new Student("张三",23),"北京");
			tm.put(new Student("张三",24),"上海");
			tm.put(new Student("王五",15),"深圳");
			tm.put(new Student("赵六",26),"广州");
*/			
	}
	private static void Demo1() {
		TreeMap<Student, String> tm = new TreeMap<>();
		tm.put(new Student("张三",23),"北京");
		tm.put(new Student("张三",24),"上海");
		tm.put(new Student("王五",15),"深圳");
		tm.put(new Student("赵六",26),"广州");
		System.out.println(tm);
	}

}

5.HashMap嵌套HashMap
package heima_day18;

import java.util.HashMap;

import heima_day18_bean.Student;

public class Demo7_HashMapHashMap {
	/**
	 * 集合嵌套之HashMap嵌套HashMap
	 * 需求
	 * 双元课堂很多基础班
	 * 第88期基础班定义一个双列集合,键是学生对象,值是学生归属地
	 * 第99期基础班定义一个双列集合,键是学生对象,值是学生归属地
	 * 无论88期还是99期都是班级对象,所以为了统一管理,把这些班级放进双元课堂中
	 */
	public static void main(String[] args) {
		//定义88期基础班
		HashMap<Student, String> hm88 = new HashMap<>();
		hm88.put(new Student("张三",23),"北京");
		hm88.put(new Student("张三",24),"上海");
		hm88.put(new Student("王五",25),"深圳");
		hm88.put(new Student("赵六",26),"广州");
		//定义99期基础班
		HashMap<Student, String> hm99 = new HashMap<>();
		hm99.put(new Student("abc",123),"北京");
		hm99.put(new Student("aaa",124),"上海");
		hm99.put(new Student("bbb",125),"深圳");
		hm99.put(new Student("ccc",126),"广州");
		//定义双元课堂
		HashMap<HashMap<Student, String> , String> hm = new HashMap<HashMap<Student,String>, String>();
		hm.put(hm88, "第88期基础班");
		hm.put(hm99, "第99期基础班");
		//遍历双列集合
		for (HashMap<Student, String> h : hm.keySet()) {//hm.keyset()代表的是双列集合中键的集合
			String value = hm.get(h);//get(h)根据键对象获取值对象
			//遍历双列集合
			for (Student key : h.keySet()) { //h,keyset()获取集合中所有的学生的键
				String value2 = h.get(key);
				System.out.println(key+"--"+value2+"--"+value);
			}
		}
	}

}

6.HashMap和Hashtable的区别

Hashtable是JDK1.0版本出现的,是线程安全的,效率低,
HashMap是JDK1.2版本出现的,是线程不安全的,效率高
Hashtable不可以存储null键和null值,HashMap可以存储null键和null值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园失物招领系统管理系统按照操作主体分为管理员和用户。管理员的功能包括字典管理、论坛管理、公告信息管理、失物招领管理、失物认领管理、寻物启示管理、寻物认领管理、用户管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 校园失物招领系统管理系统可以提高校园失物招领系统信息管理问题的解决效率,优化校园失物招领系统信息处理流程,保证校园失物招领系统信息数据的安全,它是一个非常可靠,非常安全的应用程序。 ,管理员权限操作的功能包括管理公告,管理校园失物招领系统信息,包括失物招领管理,培训管理,寻物启事管理,薪资管理等,可以管理公告。 失物招领管理界面,管理员在失物招领管理界面中可以对界面中显示,可以对失物招领信息的失物招领状态进行查看,可以添加新的失物招领信息等。寻物启事管理界面,管理员在寻物启事管理界面中查看寻物启事种类信息,寻物启事描述信息,新增寻物启事信息等。公告管理界面,管理员在公告管理界面中新增公告,可以删除公告。公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值