java_day12练习题
练习1
一、需求说明:自定义一个学生类,给出成员变量name和age,使用HashSet集合存储自定义对
象并遍历,遍历集合的时候,在控制台输出学生对象的成员变量值。要求使用两种方式进行遍历
(迭代器、增强for)。
二、当上述内容解决完毕以后,如果集合中存储的学生对象,年龄和姓名都相同,认为是同一个
人,就不存储在集合中,该如何做呢。
package com. scy12;
import java. util. Objects;
public class Student {
private String name;
private int age;
public Student ( ) {
}
public Student ( String name, int age) {
this . name = name;
this . age = 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;
}
@Override
public boolean equals ( Object o) {
if ( this == o) return true ;
if ( o == null || getClass ( ) != o. getClass ( ) ) return false ;
Student student = ( Student) o;
return age == student. age &&
Objects. equals ( name, student. name) ;
}
@Override
public int hashCode ( ) {
return Objects. hash ( name, age) ;
}
}
package com. scy12;
import java. util. HashSet;
import java. util. Iterator;
public class HashSetDemo {
public static void main ( String[ ] args) {
HashSet< Student> hs = new HashSet < Student> ( ) ;
Student s1 = new Student ( "林青霞" , 30 ) ;
Student s2 = new Student ( "张曼玉" , 32 ) ;
Student s3 = new Student ( "王祖贤" , 33 ) ;
Student s4 = new Student ( "王祖贤" , 33 ) ;
Student s5 = new Student ( "张曼玉" , 32 ) ;
hs. add ( s1) ;
hs. add ( s2) ;
hs. add ( s3) ;
hs. add ( s4) ;
hs. add ( s5) ;
Iterator< Student> it = hs. iterator ( ) ;
while ( it. hasNext ( ) ) {
Student s = it. next ( ) ;
System. out. println ( s. getName ( ) + s. getAge ( ) ) ;
}
for ( Student s : hs) {
System. out. println ( s. getName ( ) + s. getAge ( ) ) ;
}
}
}
练习2
三、需求说明:自定义一个学生类,给出成员变量name和age,创建HashMap集合键是String,
代表学号,值是自定义学生对象,代表每一个学生,给集合中添加一些元素,并使用两种方式遍
历HashMap集合。
package com. scy12;
import java. util. Objects;
public class Student {
private String name;
private int age;
public Student ( ) {
}
public Student ( String name, int age) {
this . name = name;
this . age = 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;
}
}
ackage com. scy12;
import java. util. HashMap;
import java. util. Map;
import java. util. Set;
public class HashMapTest {
public static void main ( String[ ] args) {
HashMap< String, Student> hm = new HashMap < String, Student> ( ) ;
Student s1 = new Student ( "林青霞" , 20 ) ;
Student s2 = new Student ( "张曼玉" , 30 ) ;
Student s3 = new Student ( "王祖贤" , 35 ) ;
hm. put ( "it001" , s1) ;
hm. put ( "it002" , s2) ;
hm. put ( "it003" , s3) ;
Set< String> keys = hm. keySet ( ) ;
for ( String key: keys) {
Student s = hm. get ( key) ;
System. out. println ( key+ s. getName ( ) + s. getAge ( ) ) ;
}
Set< Map. Entry< String, Student> > set = hm. entrySet ( ) ;
for ( Map. Entry< String, Student> me: set) {
String s = me. getKey ( ) ;
Student std = me. getValue ( ) ;
System. out. println ( s+ std. getName ( ) + std. getAge ( ) ) ;
}
}
}
练习3
一、需求说明:自定义一个学生类,给出成员变量name和age,创建HashMap集合键是自定义学
生对象,代表每一个学生,值是String,代表学生地址,给集合中添加一些元素,并使用两种方
式遍历HashMap集合。如果学生对象的成员变量值相同,就说明是同一个键。
package com. scy12;
import java. util. Objects;
public class Student {
private String name;
private int age;
public Student ( ) {
}
public Student ( String name, int age) {
this . name = name;
this . age = 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;
}
@Override
public boolean equals ( Object o) {
if ( this == o) return true ;
if ( o == null || getClass ( ) != o. getClass ( ) ) return false ;
Student student = ( Student) o;
return age == student. age &&
Objects. equals ( name, student. name) ;
}
@Override
public int hashCode ( ) {
return Objects. hash ( name, age) ;
}
}
package com. scy12;
import java. security. Key;
import java. util. HashMap;
import java. util. Map;
import java. util. Set;
public class HashMapTest {
public static void main ( String[ ] args) {
HashMap< Student, String> hm = new HashMap < Student, String> ( ) ;
Student s1 = new Student ( "林青霞" , 20 ) ;
Student s2 = new Student ( "张曼玉" , 30 ) ;
Student s3 = new Student ( "王祖贤" , 35 ) ;
Student s4 = new Student ( "王祖贤" , 35 ) ;
hm. put ( s1, "南京" ) ;
hm. put ( s2, "北京" ) ;
hm. put ( s3, "上海" ) ;
hm. put ( s4, "香港" ) ;
Set< Student> keys = hm. keySet ( ) ;
for ( Student key: keys) {
String s = hm. get ( key) ;
System. out. println ( key. getName ( ) + key. getAge ( ) + s) ;
}
}
}
练习4
一、需求说明:ArrayList集合嵌套HashMap集合并遍历。
定义一个ArrayList集合,它包含三个元素,每一个元素都是HashMap类型的。每一个HashMap集合的键和值都是String类型的,
键:String 丈夫的姓名
值:String 妻子的姓名
给出如下的字符串数据,请用代码实现需求。
第一个HashMap集合的元素:
孙策 大乔
周瑜 小乔
第二个HashMap集合的元素:
郭靖 黄蓉
杨过 小龙女
第三个HashMap集合的元素:
令狐冲 任盈盈
林平之 岳灵珊
package com. scy12;
import java. util. ArrayList;
import java. util. HashMap;
import java. util. Set;
public class ArrayListIncludeHashMapTest {
public static void main ( String[ ] args) {
ArrayList< HashMap< String, String> > array = new ArrayList < HashMap< String, String> > ( ) ;
HashMap< String, String> hm1 = new HashMap < String, String> ( ) ;
hm1. put ( "孙策" , "大乔" ) ;
hm1. put ( "周瑜" , "小乔" ) ;
HashMap< String, String> hm2 = new HashMap < String, String> ( ) ;
hm2. put ( "郭靖" , "黄蓉" ) ;
hm2. put ( "杨过" , "小龙女" ) ;
HashMap< String, String> hm3 = new HashMap < String, String> ( ) ;
hm3. put ( "令狐冲" , "任盈盈" ) ;
hm3. put ( "林平之" , "岳灵珊" ) ;
array. add ( hm1) ;
array. add ( hm2) ;
array. add ( hm3) ;
for ( HashMap< String, String> hm: array) {
Set< String> set = hm. keySet ( ) ;
for ( String key: set) {
String value = hm. get ( key) ;
System. out. println ( key+ "---" + value) ;
}
System. out. println ( "------------" ) ;
}
}
}
练习5
二、需求说明:HashMap集合嵌套ArrayList集合并遍历。
定义一个HashMap集合,它包含三个元素,每一个元素的键是String类型,值是ArrayList类型。
键:String 人物来自哪部电视剧
值:ArrayList 人物的名称
每一个ArrayList集合的数据是String类型的。
给出如下的字符串数据,请用代码实现需求。
第一个ArrayList集合的元素:(三国演义)
诸葛亮
赵云
第二个ArrayList集合的元素:(西游记)
唐僧
孙悟空
第三个ArrayList集合的元素:(水浒传)
武松
鲁智深
package com. scy12;
import java. util. ArrayList;
import java. util. HashMap;
import java. util. Set;
public class HashMapIncludeArrayListTest {
public static void main ( String[ ] args) {
HashMap< String, ArrayList< String> > hm = new HashMap < String, ArrayList< String> > ( ) ;
ArrayList< String> sgyy = new ArrayList < String> ( ) ;
sgyy. add ( "诸葛亮" ) ;
sgyy. add ( "赵云" ) ;
hm. put ( "三国演义" , sgyy) ;
ArrayList< String> xyj = new ArrayList < String> ( ) ;
xyj. add ( "唐僧" ) ;
xyj. add ( "孙悟空" ) ;
hm. put ( "西游记" , xyj) ;
ArrayList< String> shz = new ArrayList < String> ( ) ;
shz. add ( "武松" ) ;
shz. add ( "鲁智深" ) ;
hm. put ( "水浒传" , shz) ;
Set< String> set = hm. keySet ( ) ;
for ( String key: set) {
ArrayList< String> array = hm. get ( key) ;
for ( String s: array) {
System. out. println ( s) ;
}
System. out. println ( "-----------------------" ) ;
}
}
}
练习6
一、分析以下需求,并用代码实现:
1.定义一个长度为10的int数组,并存入10个int类型的数据,其中有一些数据是重复的
2.利用集合的知识对数组进行去重,产生新数组,不能改变数组中原来数字的大小顺序
3.打印新数组中的内容按照以下描述完成类的定义。
package com. scy12;
import java. util. ArrayList;
import java. util. HashSet;
public class Test {
public static void main ( String[ ] args) {
int [ ] arr = { 1 , 2 , 3 , 4 , 5 , 5 , 6 , 6 , 7 , 7 } ;
ArrayList< Integer> array = new ArrayList < Integer> ( ) ;
for ( int in: arr) {
if ( ! array. contains ( in) ) {
array. add ( Integer. valueOf ( in) ) ;
}
}
int [ ] new_arr = new int [ array. size ( ) ] ;
for ( int i= 0 ; i< new_arr. length; i++ ) {
new_arr[ i] = array. get ( i) . intValue ( ) ;
System. out. print ( new_arr[ i] ) ;
}
}
}
练习7
一、需求分析:键盘读取一行输入,去掉其中重复字符, 打印出不同的那些字符
2.2.操作步骤描述
1.键盘录入字符串
2.遍历字符串,将每个字符存储到集合中
3.将集合中重复的字符去掉
4.创建新集合,遍历老集合,获取老集合中的元素,判断新集合中是否包含这个元素
a)如果不包含,则将这个元素添加到新集合中
5.清空老集合中元素
6.将新集合中的元素添加到老集合中
7.遍历老集合
package com. scy12;
import java. util. ArrayList;
import java. util. HashSet;
import java. util. Scanner;
public class Test {
public static void main ( String[ ] args) {
Scanner sc = new Scanner ( System. in) ;
System. out. println ( "请输入字符串" ) ;
String str = sc. nextLine ( ) ;
char [ ] c = str. toCharArray ( ) ;
ArrayList< Character> array = new ArrayList < Character> ( ) ;
for ( char ch : c) {
if ( ! array. contains ( ch) )
array. add ( ch) ;
}
for ( char ch: array) {
System. out. print ( ch) ;
}
}
}
练习8
一、分析以下需求,并用代码实现
1.产生10个1-20之间的随机数要求随机数不能重复
2.产生10个长度为10的不能重复的字符串(里面只能出现大写字母、小写字母、0-9的数字),
并遍历打印输出
package com. scy12;
import java. util. HashSet;
import java. util. Random;
public class Test {
public static void main ( String[ ] args) {
HashSet< Integer> hs = new HashSet < Integer> ( ) ;
Random r = new Random ( ) ;
while ( hs. size ( ) < 20 ) {
hs. add ( Integer. valueOf ( r. nextInt ( 20 ) + 1 ) ) ;
}
System. out. println ( hs) ;
}
}
字符大写字母'65' -- - > 'A' -- -- > 'Z' (90 )
字符小写字母'97' -- - > 'a' -- -- > 'z' (122 )
package com. scy12;
import java. util. HashSet;
import java. util. Random;
public class Test {
public static void main ( String[ ] args) {
HashSet< Integer> hs = new HashSet < Integer> ( ) ;
Random r = new Random ( ) ;
while ( hs. size ( ) < 20 ) {
hs. add ( Integer. valueOf ( r. nextInt ( 20 ) + 1 ) ) ;
}
System. out. println ( hs) ;
System. out. println ( "-----------------------" ) ;
HashSet< String> hs1 = new HashSet < String> ( ) ;
StringBuilder sb = new StringBuilder ( ) ;
for ( int i = 0 ; i <= 9 ; i++ ) {
sb. append ( i) ;
}
for ( int i = 97 ; i <= 122 ; i++ ) {
sb. append ( ( char ) i) ;
}
for ( int i = 65 ; i <= 90 ; i++ ) {
sb. append ( ( char ) i) ;
}
String s = sb. toString ( ) ;
System. out. println ( s) ;
StringBuilder sb1 = new StringBuilder ( ) ;
while ( hs1. size ( ) < 10 ) {
for ( int i= 0 ; i< 10 ; i++ ) {
sb1. append ( s. charAt ( r. nextInt ( 62 ) ) ) ;
}
hs1. add ( sb1. toString ( ) ) ;
sb1. delete ( 0 , sb1. toString ( ) . length ( ) ) ;
}
System. out. println ( hs1) ;
}
}
练习9
一、分析以下需求,并用代码实现
1.利用键盘录入,输入一个字符串
2.统计该字符串中各个字符的数量(提示:字符不用排序)
3.如:
用户输入字符串"If~you-want~to~change-your_fate_I_think~you~must~come-to-the-dark-horse-to-learn-java"
程序输出结果:-(9)I(2)_(3)a(7)c(2)d(1)e(6)f(2)g(1)h(4)i(1)j(1)k(2)l(1)m(2)n(4)o(8)r(4)s(2)t(8)u(4)v(1)w(1)y(3)~(6)
4.2.操作步骤描述
1.创建map集合,键为Character,值为Integer
2.键盘录入字符串 str
3.将字符串转换为字符数组,并遍历这个字符数组,获取每个字符
4.在循环中判断集合中map集合中的键是否包含这个字符,如果map集合中的键不包含这
a)个字符,那么就让map执行put方法,键就是遍历到的字符,值为1
b)如果map集合中包含这个键,就让map集合的值 + 1存储
5.循环完毕后,遍历map集合进行打印,打印过程中按照指定格式来进行。
package com. scy12;
import javafx. beans. binding. MapBinding;
import java. util. *;
public class Test {
public static void main ( String[ ] args) {
Map< Character, Integer> map = new HashMap < Character, Integer> ( ) ;
Scanner sc = new Scanner ( System. in) ;
System. out. println ( "用户输入字符串:" ) ;
String str = sc. nextLine ( ) ;
char [ ] c = new char [ str. length ( ) ] ;
for ( int i= 0 ; i< str. length ( ) ; i++ ) {
c[ i] = str. charAt ( i) ;
}
int count = 0 ;
for ( char cc: c) {
if ( ! map. containsKey ( cc) ) {
map. put ( cc, 1 ) ;
}
else {
map. put ( cc, map. get ( cc) + 1 ) ;
}
}
Set< Map. Entry< Character, Integer> > set = map. entrySet ( ) ;
for ( Map. Entry< Character, Integer> me: set) {
Character ch = me. getKey ( ) ;
Integer in = me. getValue ( ) ;
System. out. print ( ch+ "(" + in+ ")" ) ;
}
}
}
练习10
一、分析以下需求,并用代码实现
1.统计每个单词出现的次数
2.有如下字符串"If you want to change your fate I think you must come to the dark horse
to learn java"(用空格间隔)
3.打印格式:
to=3
think=1
you=2
//........
package com. scy12;
import javafx. beans. binding. MapBinding;
import java. util. *;
public class Test {
public static void main ( String[ ] args) {
Map< String, Integer> map = new HashMap < String, Integer> ( ) ;
String s = "If you want to change your fate I think you must come to the dark horse to learn java" ;
String[ ] str = s. split ( " " ) ;
for ( String ss: str) {
if ( ! map. containsKey ( ss) ) {
map. put ( ss, 1 ) ;
}
else {
map. put ( ss, map. get ( ss) + 1 ) ;
}
}
Set< Map. Entry< String, Integer> > set = map. entrySet ( ) ;
for ( Map. Entry< String, Integer> me: set) {
String key = me. getKey ( ) ;
Integer value = me. getValue ( ) ;
System. out. println ( key+ "=" + value) ;
}
}
}