java Map扩展知识练习

/*
map扩展知识。
map集合被使用是因为映射关系。
编程实现以下数据:
"yureban"  -> "01" "zhangsan"
"yureban"  -> "02" "lisi"

"jiuyeban" -> "01" "wangwu"
"jiuyeban" -> "02" "zhaoliu"
注意一个键对应一个值,所以根据上面的例子,应该想到这个“值”本身也要是一个集合来存储具有映射关系的多对值。
*/
import java.util.*;
class MapTest4
{
	public static void main(String[] args)
	{
		HashMap<String,HashMap<String,String>> hm=new HashMap<String,HashMap<String,String>>();

		HashMap<String,String> yure=new HashMap<String,String>();
		HashMap<String,String> jiuye=new HashMap<String,String>();

		yure.put("01","yure_stu_001");
		yure.put("02","yure_stu_002");

		jiuye.put("01","jiuye_stu_01");
		jiuye.put("02","jiuye_stu_02");

		hm.put("yure",yure);
		hm.put("jiuye",jiuye);

		//print_1(hm,"yure");
		//sop("--------");
		//print_2(hm,"jiuye");

		print_All1(hm);

	}

	public static void print_All1(HashMap<String,HashMap<String,String>> hm)
	{
		Set<Map.Entry<String,HashMap<String,String>>> set=hm.entrySet();

		Iterator<Map.Entry<String,HashMap<String,String>>> it=set.iterator();
		while(it.hasNext())
		{
			Map.Entry<String,HashMap<String,String>> me=it.next();
			String key=me.getKey();
			HashMap<String,String> hash=me.getValue();
			Set<Map.Entry<String,String>> s=hash.entrySet();
			Iterator<Map.Entry<String,String>> it1=s.iterator();
			while(it1.hasNext())
			{
				Map.Entry<String,String> me1=it1.next();
				String sub_key=me1.getKey();
				String sub_value=me1.getValue();
				sop(key+"....."+sub_key+"......"+sub_value);
			}
		}
	}

	public static void print_All2(HashMap<String,HashMap<String,String>> hm)
	{
		Set<String> set=hm.keySet();  //获取教室名称

		Iterator<String> it=set.iterator();
		while(it.hasNext())
		{
			HashMap<String,String> hash=hm.get(it.next());
			Set<Map.Entry<String,String>> s=hash.entrySet();
			Iterator<Map.Entry<String,String>> it1=s.iterator();
			while(it1.hasNext())
			{
				Map.Entry<String,String> me=it1.next();
				String key=me.getKey();
				String value=me.getValue();
				sop("print--->"+key+"..."+value);
			}
		}
	}

	public static void print_1(HashMap<String,HashMap<String,String>> hm,String room)
	{
		HashMap<String,String> hash=hm.get(room);
		Set<String> set=hash.keySet();

		Iterator<String> it=set.iterator();
		while(it.hasNext())
		{
			String key=it.next();
			String name=hash.get(key);
			sop(key+"..."+name);
		}

	}

	public static void print_2(HashMap<String,HashMap<String,String>> hm,String room)
	{
		HashMap<String,String> hash=hm.get(room);

		Set<Map.Entry<String,String>> set=hash.entrySet();
		Iterator<Map.Entry<String,String>> it=set.iterator();

		while(it.hasNext())
		{
			Map.Entry<String,String> me=it.next();
			String key=me.getKey();
			String value=me.getValue();
			sop(key+"..."+value);
		}
	}

	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
}

/*
map扩展知识(续)。

编程实现存储以下结构的数据:

"yureban"  Student("001","zhangsan")
"yureban"  Student("002","lisi")

"jiuyeban" Student("001","wangwu")
"jiuyeban" Student("002","zaholiu")

 解题分析:
 不能将班级名称作为键,将学生对象作为值存入map中,因为键时重复的。
 但是可以构造这样的数据结构,即班级名称对应一个集合,这个集合存储多个学生的信息。
*/
import java.util.*;
class Student
{
	private String no;
	private String name;
	Student(String no,String name)
	{
		this.no=no;
		this.name=name;
	}

	public String getNo()
	{
		return no;
	}

	public String getName()
	{
		return name;
	}

	public boolean equals(Object obj)
	{
		if(!(obj instanceof Student))
			throw new RuntimeException("不是学生对象");
		Student s=(Student)obj;
		boolean flag=this.no.equals(s.no) && this.name.equals(s.name);
		//MapTest5.sop(this.no+"..."+s.no);
		//MapTest5.sop(flag);
		return flag;
	}

}

class MapTest5
{
	public static void main(String[] args)
	{
		HashMap<String,ArrayList<Student>> hash=new HashMap<String,ArrayList<Student>>();

		ArrayList<Student> yure=new ArrayList<Student>();
		yure.add(new Student("001","zhangsan001"));
		yure.add(new Student("002","zhangsan002"));
		yure.add(new Student("005","zhangsan005"));
		yure.add(new Student("004","zhangsan004"));
		yure.add(new Student("003","zhangsan003"));
		yure.add(new Student("003","zhangsan003"));

		yure=quchong(yure);
		hash.put("yure",yure);

		ArrayList<Student> jiuye=new ArrayList<Student>();
		jiuye.add(new Student("001","lisi001"));
		jiuye.add(new Student("002","lisi002"));
		jiuye.add(new Student("005","lisi005"));
		jiuye.add(new Student("004","lisi004"));
		jiuye.add(new Student("003","lisi003"));
		jiuye.add(new Student("004","lisi004"));
		jiuye=quchong(jiuye);
		hash.put("jiuye",jiuye);
		//sop(hash);
		print(hash);

		/*
		Iterator it=yure.iterator();
		while(it.hasNext())
		{
			Student s=(Student)it.next();
			sop(s.getNo()+"..."+s.getName());
		}
		*/

	}

	public static ArrayList<Student> quchong(ArrayList<Student> al)
	{
		ArrayList<Student> arrlist=new ArrayList<Student>();
		Iterator<Student> it=al.iterator();
		while(it.hasNext())
		{
			Student s=it.next();
			if(!(arrlist.contains(s)))
				arrlist.add(s);
		}
		return arrlist;

	}

	public static void print(HashMap<String,ArrayList<Student>> hm)
	{
		Set<Map.Entry<String,ArrayList<Student>>> set=hm.entrySet();
		Iterator<Map.Entry<String,ArrayList<Student>>> it=set.iterator();
		while(it.hasNext())
		{
			Map.Entry<String,ArrayList<Student>> me=it.next();
			String key=me.getKey();
			ArrayList<Student> al=me.getValue();
			Iterator<Student> it1=al.iterator();
			while(it1.hasNext())
			{
				Student s=it1.next();
				sop(key+"..."+s.getNo()+"..."+s.getName());
			}
		}
	}

	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
}
时间: 2024-11-09 06:21:03

java Map扩展知识练习的相关文章

java map扩展

map集合被使用是因为具备映射关系. 一个学校有多个教室,每个教室都有多个学生. public class Demo { public static void main(String[] args) { HashMap<String,HashMap<String,String>> czbk = new HashMap<String,HashMap<String,String>>(); HashMap<String,String> yure = n

黑马程序员——Java集合基础知识之Map

Map概念 要同时存储两个元素Key和Value,他们之间有映射关系,每个键不能重复,每个键只能映射到一个值. 当数据之间存在映射关系的时候,考虑使用Map集合. Map常用方法 如果添加的键原来有值,后添加的值会覆盖前面的值,并返回之前的值.put会返回来先添加的值,后添加的值会覆盖原有的值. Map tm =new TreeMap(); tm.put (key, value);//MAP没有add tm.remove (key) ;//去除一个key和对应的value,若不存在key返回nu

了解Java密码扩展的基础

  了解Java密码扩展的基础     Java密码扩展(The Java Cryptography Extension),是JDK1.4的一个重要部分,基本上,他是由一些包构成的,这些包形成了一个框架并实现了一些加密,密钥生成算法和协议,消息认证码等算法,这篇文章将想你介绍JCE的安装和使用.    值得注意的是,尽管JCE是JDK1.4的核心包的一部分,我们将首先用JDK1.2及高一点的版本向你演示一下如何安装配置JCE(静态安装).稍后,将向你介绍如何在不安装的情况下使用JCE(动态安装)

java Map排序(升序、降序、随机排序)

基础知识: 1 HashMap会使用key,根据hashcode进行默认排序. 2  LinkedHashMap根据存入先后进行排序 代码展示: 1 随机排序 java Map排序(升序.降序.随机排序),布布扣,bubuko.com

【JAVA】六 JAVA Map 一 HashMap

[JAVA]六 JAVA Map 一 HashMap JDK API java.util Interface Map Type Parameters: K - the type of keys maintained by this map V - the type of mapped values All Known Subinterfaces: Bindings, ConcurrentMap<K,V>, ConcurrentNavigableMap<K,V>, LogicalMe

黑马程序员——Java集合基础知识之Collection

集合基础知识--Collection Java中集合框架由常用的Collection接口和Map接口组成,而Collection接口又有两个子接口,是List接口和Set接口,常用的集合框架由这三个类组成. List接口的功能方法 List的使用最为简单,创建集合,通过add方法添加元素,get方法获取元素,通过迭代器获取元素.List接口存放的数据无序的,添加速度快,但是查询速度慢,因为查询的时候必须遍历,每次都重头开始,效率较低.常用实现类有ArrayList,LinkedList. Lis

什么才是java的基础知识?

近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先扎实自己的基础知识,那什么才是java的基础知识?又怎么样才算掌握了java的基础知识呢?这个问题还真值得仔细思考. 我做j2ee开发已经超过十载,作为过来人,心路历程估计和大家差不多.编码的前几年,很长一段时间觉得java简单,开发实现各种功能都很轻松,代码写起来根本不费劲(主要是因为写的代码都是一些功能业务逻辑).但同时自己心里明白,自己其实没有什么水平,自己这3,4年以来学懂的东西就那么多,其他人几个月就可以

Java管理扩展JMX之HelloWord篇

JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序.设备.系统等植入管理功能的框架.JMX可以跨越一系列异构操作系统平台.系统体系结构和网络传输协议,灵活的开发无缝集成的系统.网络和服务管理应用. 用于发布服务的接口类ITestHelloMXBean.java [codesyntax lang="java" lines="normal"] package org.suren.littlebird; /** * @aut

Java 接口基础知识

一.Java接口基础知识 1, Java语言不支持一个类有多个直接的父类(多继承),但可以实现(implements)多个接口,间接的实现了多继承. 2, 与Java接口相关的设计模式: 1, 定制服务模式 设计精粒度的接口,每个Java接口代表相关的一组服务,通过继承来创建复合接口 2, 适配器模式 当每个系统之间接口不匹配时,用适配器来转换接口 3, 默认适配器模式 为接口提供简单的默认实现 4, 代理模式 为Java接口的实现类创建代理类,使用者通过代理来获得实现类的服务 5, 标识类型模