JavaSE第12天练习题(Set集合、HashSet、Map)

一、 基础案例

1. 训练案例1

1.1. 训练描述:【HashSet类】
一、 需求说明:自定义一个学生类,给出成员变量name和age,使用HashSet集合存储自定义对象并遍历,遍历集合的时候,在控制台输出学生对象的成员变量值。要求使用两种方式进行遍历(迭代器、增强for)
二、 当上述内容解决完毕以后,如果集合中存储的学生对象,年龄和姓名都相同,认为是同一个人,就不存储在集合中,该如何做呢。
1.2. 操作步骤描述

  1. 创建学生类。
  2. 创建集合对象。
  3. 创建元素对象。
  4. 把元素添加到集合。
  5. 遍历集合。
  6. 为了保证集合存储元素的唯一性,需要在学生类中重写equals()和hashCode()方法。
public class Student {
	String name ;
	int age ;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public Student() {
		
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
	
}
import java.util.HashSet;
import java.util.Set;

public class Main01 {
	public static void main(String[] args) {
		Set<Student> set = new HashSet<Student>();
		Student s1 = new Student("小明",25);
		Student s2 = new Student("大华",28);
		Student s3 = new Student("红红",20);
		Student s4 = new Student("红红",20);
		set.add(s1);
		set.add(s2);
		set.add(s3);
		set.add(s4);
		for(Student s : set){
			System.out.println(s.getName()+",年龄"+s.getAge());
		}
	}
}
/*红红,年龄20
大华,年龄28
小明,年龄25*/

2. 训练案例2

2.1. 训练描述:【HashMap】
三、 需求说明:自定义一个学生类,给出成员变量name和age,创建HashMap集合键是String,代表学号,值是自定义学生对象,代表每一个学生,给集合中添加一些元素,并使用两种方式遍历HashMap集合。
2.2. 操作步骤描述

  1. 创建学生类。
  2. 创建集合对象。
  3. 创建学生对象。
  4. 把元素添加到集合。
  5. 遍历集合。
//学生类同上
import java.util.HashMap;
import java.util.Map;
import java.util.Set;


public class Main02 {
	public static void main(String[] args) {
		Student s1 = new Student("小明",25);
		Student s2 = new Student("大华",28);
		Student s3 = new Student("红红",20);
		Student s4 = new Student("红红",21);
		Map<String,Student> map = new HashMap<String,Student>();
		map.put("001", s1);
		map.put("002", s2);
		map.put("003", s3);
		map.put("004", s4);
		Set<String> set = map.keySet();
		for(String key : set){
			Student value = map.get(key);
			System.out.println(key+"  "+value.getName()+" "+value.getAge());
		}
		System.out.println("***************************************************");
		Set<Map.Entry<String, Student>> sete = map.entrySet();
		for(Map.Entry<String, Student> ss : sete){
			String k = ss.getKey();
			Student v = ss.getValue();
			System.out.println(k+"  "+v.getName()+" "+v.getAge());
		}		
	}
}
/*001  小明 25
002  大华 28
003  红红 20
004  红红 21
***************************************************
001  小明 25
002  大华 28
003  红红 20
004  红红 21*/

3. 训练案例3

3.1. 训练描述:【HashMap】
一、 需求说明:自定义一个学生类,给出成员变量name和age,创建HashMap集合键是自定义学生对象,代表每一个学生,值是String,代表学生地址,给集合中添加一些元素,并使用两种方式遍历HashMap集合。如果学生对象的成员变量值相同,就说明是同一个键。
3.2. 操作步骤描述

  1. 创建学生类。
  2. 创建集合对象。
  3. 创建元素对象。
  4. 把元素添加到集合。
  5. 遍历集合。
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import day12.test02.Student;

public class Main03 {
	public static void main(String[] args) {
		Student s1 = new Student("小明",25);
		Student s2 = new Student("大华",28);
		Student s3 = new Student("红红",20);
		Student s4 = new Student("火火",21);
		Map<String,Student> map = new HashMap();
		map.put("001", s1);
		map.put("002", s2);
		map.put("003", s3);
		map.put("003", s4);
		
		Set<String> kset = map.keySet();
		for(String k :kset){
			Student v = map.get(k);
			System.out.println(k +"  "+v.getName()+" "+v.getAge());
		}
		System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
		
		Set<Map.Entry<String, Student>> meset = map.entrySet();
		for(Map.Entry<String, Student> me : meset){
			System.out.println(me.getKey()+"  "+me.getValue().getName()+" "+me.getValue().getAge());
			
		}
	}
}
/*001  小明 25
002  大华 28
003  火火 21
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
001  小明 25
002  大华 28
003  火火 21*/

4. 训练案例4

4.1. 训练描述:【ArrayList类、HashMap】
一、 需求说明:ArrayList集合嵌套HashMap集合并遍历。
定义一个ArrayList集合,它包含三个元素,每一个元素都是HashMap类型的。每一个HashMap集合的键和值都是String类型的,
键:String 丈夫的姓名
值:String 妻子的姓名
给出如下的字符串数据,请用代码实现需求。
第一个HashMap集合的元素:
孙策 大乔
周瑜 小乔
第二个HashMap集合的元素:
郭靖 黄蓉
杨过 小龙女
第三个HashMap集合的元素:
令狐冲 任盈盈
林平之 岳灵珊

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

public class Main04 {
	public static void main(String[] args) {
	Map<String ,String> map1 = new HashMap();
	map1.put("孙策", "大乔");
	map1.put("周瑜", "小乔");
	Map<String ,String> map2 = new HashMap();
	map2.put("郭靖", "黄蓉");
	map2.put("杨过", "小龙女");
	Map<String ,String> map3 = new HashMap();
	map3.put("令狐冲", "任盈盈");
	map3.put("林平之", "岳灵珊");
	ArrayList<Map> list = new ArrayList<Map>();
	list.add(map1);
	list.add(map2);
	list.add(map3);
	
	for (int i = 0; i < list.size(); i++) {
		Map<String, String> map = list.get(i);
		Set<String> kset = map.keySet();
		for(String k : kset){
			
			String v = map.get(k);
		
			System.out.println(k+"  "+v);
			
		}
		System.out.println("****************************************");
		}
	}
}
孙策  大乔
周瑜  小乔
****************************************
杨过  小龙女
郭靖  黄蓉
****************************************
令狐冲  任盈盈
林平之  岳灵珊
****************************************

5. 训练案例5

5.1. 训练描述:【ArrayList类、HashMap】
二、 需求说明:HashMap集合嵌套ArrayList集合并遍历。
定义一个HashMap集合,它包含三个元素,每一个元素的键是String类型,值是ArrayList类型。
键:String 人物来自哪部电视剧
值:ArrayList 人物的名称
每一个ArrayList集合的数据是String类型的。
给出如下的字符串数据,请用代码实现需求。
第一个ArrayList集合的元素:(三国演义)
诸葛亮
赵云
第二个ArrayList集合的元素:(西游记)
唐僧
孙悟空
第三个ArrayList集合的元素:(水浒传)
武松
鲁智深

public class Main05 {

	public static void main(String[] args) {
		ArrayList<String> list01 = new ArrayList<String>();
		ArrayList<String> list02 = new ArrayList<String>();
		ArrayList<String> list03 = new ArrayList<String>();
		list01.add("诸葛亮");
		list01.add("赵云");
		list02.add("唐僧");
		list02.add("孙悟空");
		list03.add("武松");
		list03.add("鲁智深");
		 
		Map<String,ArrayList> map = new HashMap();
		map.put("三国演义", list01);
		map.put("西游记", list02);
		map.put("水浒传", list03);
		
		Set<String> keyset = map.keySet(); 
		for(String k :keyset){
			ArrayList v = map.get(k);
			System.out.println(k+":");
			for (int i = 0; i < v.size(); i++) {
				System.out.println(v.get(i));
			}
			System.out.println();
		}
	}

}
/*水浒传:
武松
鲁智深

三国演义:
诸葛亮
赵云

西游记:
唐僧
孙悟空*/

二、 扩展案例

1. 训练案例1

1.1. 训练描述:
一、 分析以下需求,并用代码实现:

  1. 定义一个长度为10的int数组,并存入10个int类型的数据,其中有一些数据是重复的
  2. 利用集合的知识对数组进行去重,产生新数组,不能改变数组中原来数字的大小顺序
  3. 打印新数组中的内容按照以下描述完成类的定义。
import java.util.ArrayList;


public class Tz01 {

	public static void main(String[] args) {
		Integer[] a = {2,1,1,4,5,5,6,9,8,9};
		ArrayList<Integer> set = new ArrayList<Integer>();
		
		for (int i = 0; i < a.length; i++) {
			if(set.contains(a[i])){
			System.out.println("已经包含"+a[i]+",跳过");
			}else{
				set.add(a[i]);
			}
		}
		for(Integer i :set){
			System.out.print(i+" ");
		}
	}

}
/*已经包含1,跳过
已经包含5,跳过
已经包含9,跳过
2 1 4 5 6 9 8 */

2. 训练案例2

2.1. 训练描述:
一、 需求分析:键盘读取一行输入,去掉其中重复字符, 打印出不同的那些字符
2.2. 操作步骤描述

  1. 键盘录入字符串
  2. 遍历字符串,将每个字符存储到集合中
  3. 将集合中重复的字符去掉
  4. 创建新集合,遍历老集合,获取老集合中的元素,判断新集合中是否包含这个元素
    a) 如果不包含,则将这个元素添加到新集合中
  5. 清空老集合中元素
  6. 将新集合中的元素添加到老集合中
  7. 遍历老集合
import java.util.ArrayList;
import java.util.Scanner;

public class Tz02 {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入一串字符:");
		String s = input.next();
		ArrayList<Character> arr = new ArrayList<Character>();
		//System.out.println(s.charAt(0));
		for (int i = 0; i < s.length(); i++) {
			if (arr.contains(s.charAt(i))){
				System.out.println("已经包含元素"+s.charAt(i)+",跳过");
			}else{
				arr.add(s.charAt(i));
			
			}
		}
		System.out.println();
		for(Character i : arr){
			System.out.print(i+" ");
		}
	}

}
/*请输入一串字符:
assddffg
已经包含元素s,跳过
已经包含元素d,跳过
已经包含元素f,跳过

a s d f g */

3. 训练案例3

3.1. 训练描述:
一、 分析以下需求,并用代码实现

  1. 产生10个1-20之间的随机数要求随机数不能重复
  2. 产生10个长度为10的不能重复的字符串(里面只能出现大写字母、小写字母、0-9的数字),并遍历打印输出
import java.util.ArrayList;
import java.util.Random;

public class Tz03 {
	public static void main(String[] args) {
		Random r = new Random();
		ArrayList<Integer> arr = new ArrayList<Integer>();
		int i = 0;
		while(i<10){
			int a = r.nextInt(20)+1;
			System.out.println(a);
			if(!arr.contains(a)){
				arr.add(a);
				i++;
			}
		}
		System.out.println();
		for(int k: arr){
			System.out.print(k+" ");
		}
	}
}

4. 训练案例4

4.1. 训练描述:
一、 分析以下需求,并用代码实现

  1. 利用键盘录入,输入一个字符串
  2. 统计该字符串中各个字符的数量(提示:字符不用排序)

4.2. 操作步骤描述

  1. 创建map集合,键为Character,值为Integer
  2. 键盘录入字符串 str
  3. 将字符串转换为字符数组,并遍历这个字符数组,获取每个字符
  4. 在循环中判断集合中map集合中的键是否包含这个字符,如果map集合中的键不包含这
    a) 个字符,那么就让map执行put方法,键就是遍历到的字符,值为1
    b) 如果map集合中包含这个键,就让map集合的值 + 1存储
  5. 循环完毕后,遍历map集合进行打印,打印过程中按照指定格式来进行。
public class TZ04 {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入字符串:");
		String s = input.next();
		Map<Character,Integer> map = new HashMap<Character,Integer>();
		for (int i = 0; i < s.length(); i++) {
			char c = s.charAt(i);
			if(map.containsKey(c)){
				map.put(c, map.get(c)+1);
			}else{
				map.put(c, 1);
			}
		}
		
		Set<Character> keyset = map.keySet();
		for(char c:keyset){
			int v = map.get(c);
			System.out.println(c+"出现次数:"+v);
		}
	}

}

5. 训练案例5

5.1. 训练描述:
一、 分析以下需求,并用代码实现

  1. 统计每个单词出现的次数
  2. 有如下字符串"If you want to change your fate I think you must come to school to learn java"(用空格间隔)
  3. 打印格式:
    to=3
    think=1
    you=2
    //…
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class Tz05 {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入字符串:");
		String s = input.next();
		Map<String,Integer> map = new HashMap<String,Integer>();
		String[] str = s.split(" ");
		System.out.println("分割次数:"+str.length);
		for (int i = 0; i < str.length; i++) {
			
			if(map.containsKey(str[i])){
				map.put(str[i], map.get(str[i])+1);
			}else{
				map.put(str[i], 1);
			}
		}
		Set<String> keyset = map.keySet();
		for(String k : keyset){
			int v = map.get(k);
			System.out.println(k+"+"+v);
		}
	}

}

你可能感兴趣的:(java练习)