1.1HashMap集合的练习键是String值是Student
练习1:两种方式遍历
- HashMap
- 键:String 学号
- 值:Student 学生对象
1.1.1案例代码
package com.itheima_03;
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;
}
}
package com.itheima_03;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/*
* 练习1:两种方式遍历
* HashMap
* 键:String 学号
* 值:Student 学生对象
*/
public class HashMapTest {
public static void main(String[] args) {
// 创建集合对象
HashMap hm = new HashMap();
// 创建元素对象
Student s1 = new Student("林青霞", 30);
Student s2 = new Student("张曼玉", 35);
Student s3 = new Student("王祖贤", 33);
// 添加元素到集合中
hm.put("it001", s1);
hm.put("it002", s2);
hm.put("it003", s3);
// 遍历
// 根据键找值
Set set = hm.keySet();
for (String key : set) {
Student value = hm.get(key);
System.out.println(key + "---" + value.getName() + "---" + value.getAge());
}
System.out.println("---------------------");
// 根据键值对对象找键和值
Set> set2 = hm.entrySet();
for (Map.Entry me : set2) {
String key = me.getKey();
Student value = me.getValue();
System.out.println(key + "---" + value.getName() + "---" + value.getAge());
}
}
}
1.2 HashMap集合的练习键是Student值是String
练习2:任选一种方式遍历
- HashMap
- 键:Student 学生对象
- 值:String 学生住址
要求:
- 如果学生对象的成员变量值相同,就说明是同一个键。
1.2.1 案例代码
package com.itheima_04;
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 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;
}
}
package com.itheima_04;
import java.util.HashMap;
import java.util.Set;
/*
* 练习2:任选一种方式遍历
* HashMap
* 键:Student 学生对象
* 值:String 学生住址
* 要求:如果学生对象的成员变量值相同,就说明是同一个键。
*/
public class HashMapTest {
public static void main(String[] args) {
//创建集合对象
HashMap hm = new HashMap();
//创建元素对象
Student s1 = new Student("林青霞",30);
Student s2 = new Student("张曼玉",35);
Student s3 = new Student("王祖贤",33);
Student s4 = new Student("张曼玉",35);
//添加元素到集合中
hm.put(s1, "北京");
hm.put(s2, "上海");
hm.put(s3, "西安");
hm.put(s4, "香港");
//键找值
Set set = hm.keySet();
for(Student key : set) {
String value = hm.get(key);
System.out.println(key.getName()+"---"+key.getAge()+"---"+value);
}
}
}
1.3 集合的嵌套练习之ArrayList嵌套HashMap
需求:
ArrayList集合嵌套HashMap集合并遍历。
定义一个ArrayList集合,它包含三个元素,每一个元素都是HashMap类型的。
键 | 值 |
---|---|
String | String |
丈夫的姓名 | 妻子的姓名 |
每一个HashMap集合的键和值都是String类型的,
键 | 值 |
---|---|
String | String |
丈夫的姓名 | 妻子的姓名 |
键 | 值 |
---|---|
String | String |
孙策 | 大乔 |
周瑜 | 小乔 |
给出如下的字符串数据,请用代码实现需求。
第一个HashMap集合的元素:
键 | 值 |
---|---|
String | String |
孙策 | 大乔 |
周瑜 | 小乔 |
键 | 值 |
---|---|
String | String |
郭靖 | 黄蓉 |
杨过 | 小龙女 |
第二个HashMap集合的元素:
键 | 值 |
---|---|
String | String |
郭靖 | 黄蓉 |
杨过 | 小龙女 |
键 | 值 |
---|---|
String | String |
令狐冲 | 任盈盈 |
林平之 | 岳灵珊 |
第三个HashMap集合的元素:
键 | 值 |
---|---|
String | String |
令狐冲 | 任盈盈 |
林平之 | 岳灵珊 |
1.3.1 案例代码
package com.itheima;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
/*
* 需求:ArrayList集合嵌套HashMap集合并遍历。
* 定义一个ArrayList集合,它包含三个元素,每一个元素都是HashMap类型的。
* 每一个HashMap集合的键和值都是String类型的,
* 键:String 丈夫的姓名
* 值:String 妻子的姓名
* 给出如下的字符串数据,请用代码实现需求。
* 第一个HashMap集合的元素:
* 孙策 大乔
* 周瑜 小乔
* 第二个HashMap集合的元素:
* 郭靖 黄蓉
* 杨过 小龙女
* 第三个HashMap集合的元素:
* 令狐冲 任盈盈
* 林平之 岳灵珊
*/
public class ArrayListIncludeHashMapTest {
public static void main(String[] args) {
//创建集合对象
ArrayList> array = new ArrayList>();
//创建元素1
HashMap hm1 = new HashMap();
hm1.put("孙策","大乔");
hm1.put("周瑜","小乔");
//把元素添加到array中
array.add(hm1);
//创建元素2
HashMap hm2 = new HashMap();
hm2.put("郭靖","黄蓉");
hm2.put("杨过","小龙女");
//把元素添加到array中
array.add(hm2);
//创建元素3
HashMap hm3 = new HashMap();
hm3.put("令狐冲","任盈盈");
hm3.put("林平之","岳灵珊");
//把元素添加到array中
array.add(hm3);
//遍历ArrayList集合
for(HashMap hm : array) {
Set set = hm.keySet();
for(String key : set) {
String value = hm.get(key);
System.out.println(key+"---"+value);
}
System.out.println("-----------------");
}
}
}
1.4集合的嵌套练习之HashMap嵌套ArrayList
- 需求:HashMap集合嵌套ArrayList集合并遍历。
定义一个HashMap集合,它包含三个元素,每一个元素的键是String类型,值是ArrayList类型。
键 | 值 |
---|---|
String | ArrayList |
人物来自哪部电视剧 | 人物的名称 |
格式
键 | 值 |
---|---|
String | ArrayList |
人物来自哪部电视剧 | 人物的名称 |
每一个ArrayList集合的数据是String类型的。
给出如下的字符串数据,请用代码实现需求
-
第一个ArrayList集合的元素:(三国演义)
- 诸葛亮
- 赵云
-
第二个ArrayList集合的元素:(西游记)
- 唐僧
- 孙悟空
-
第三个ArrayList集合的元素:(水浒传)
- 武松
- 鲁智深
1.4.1 案例代码
package com.itheima;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
/*
* 需求:HashMap集合嵌套ArrayList集合并遍历。
* 定义一个HashMap集合,它包含三个元素,每一个元素的键是String类型,值是ArrayList类型。
* 键:String 人物来自哪部电视剧
* 值:ArrayList 人物的名称
* 每一个ArrayList集合的数据是String类型的。
* 给出如下的字符串数据,请用代码实现需求。
* 第一个ArrayList集合的元素:(三国演义)
* 诸葛亮
* 赵云
* 第二个ArrayList集合的元素:(西游记)
* 唐僧
* 孙悟空
* 第三个ArrayList集合的元素:(水浒传)
* 武松
* 鲁智深
*/
public class HashMapIncludeArrayListTest {
public static void main(String[] args) {
//创建集合对象
HashMap> hm = new HashMap>();
//创建元素1
ArrayList sgyy = new ArrayList();
sgyy.add("诸葛亮");
sgyy.add("赵云");
//把元素添加到hm中
hm.put("三国演义", sgyy);
//创建元素2
ArrayList xyj = new ArrayList();
xyj.add("唐僧");
xyj.add("孙悟空");
//把元素添加到hm中
hm.put("西游记", xyj);
//创建元素3
ArrayList shz = new ArrayList();
shz.add("武松");
shz.add("鲁智深");
//把元素添加到hm中
hm.put("水浒传", shz);
//遍历集合
Set set = hm.keySet();
for(String key : set) {
System.out.println(key);
ArrayList value = hm.get(key);
for(String s : value) {
System.out.println("\t"+s);
}
}
}
}