- 案例:HashMap集合存储学生对象并遍历
需求:创建一个HashMap集合,键是学号(String),值是学生对象(Student)。存储三个键值对元素,并遍历。
分析:
(1)定义学生类;
(2)创建HashMap集合对象;
(3)创建学生对象;
(4)把学生添加到集合;
(5)遍历集合(键找值、键值对对象找键和值)
完整代码:
package com.xuexi;
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.xuexi;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Demo6 {
public static void main(String[] args) {
//创建Map集合对象
Map<String,Student> map = new HashMap<String, Student>();
//创建学生对象
Student s1 = new Student("Tom",9);
Student s2 = new Student("Tim",19);
Student s3 = new Student("Bob",91);
//添加学生到集合
map.put("001",s1);
map.put("002",s2);
map.put("003",s3);
//方式一:找键值
Set<String> keySet = map.keySet();
for (String key : keySet){
Student value = map.get(key);
System.out.println(key+','+value.getName()+','+value.getAge());
}
System.out.println("---------");
//方式二:键值对找键值
Set<Map.Entry<String, Student>> entrySet = map.entrySet();
for (Map.Entry<String, Student> me : entrySet){
String key = me.getKey();
Student value = me.getValue();
System.out.println(key+','+value.getName()+','+value.getAge());
}
}
}
运行结果:
001,Tom,9
002,Tim,19
003,Bob,91
---------
001,Tom,9
002,Tim,19
003,Bob,91
- 案例:HashMap集合存储学生对象并遍历
需求:创建一个HashMap集合,键是学生对象(Student),值是居住地(String)。存储多个键值对元素,并遍历。
要求保证键的唯一性,如果学生对象的成员变量值相同,认为是同一个对象
分析:
(1)定义学生类;
(2)创建HashMap集合对象;
(3)创建学生对象;
(4)把学生添加到集合;
(5)遍历集合;
(6)在学生类中重写两个方法:hashCode()、equals().
完整代码:
package com.xuexi;
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;
if (age != student.age) return false;
return name != null ? name.equals(student.name) : student.name == null;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + age;
return result;
}
}
package com.xuexi;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Demo7 {
public static void main(String[] args) {
//创建Map集合对象
Map<Student,String> map = new HashMap<Student, String>();
//创建学生对象
Student s1 = new Student("Tom",9);
Student s2 = new Student("Tim",19);
Student s3 = new Student("Bob",91);
Student s4 = new Student("Bob",91);
//把学生添加到集合
map.put(s1,"UK");
map.put(s2,"CN");
map.put(s3,"UN");
map.put(s4,"Ja");
//遍历
Set<Student> keySet = map.keySet();
for (Student key : keySet){
String value = map.get(key);
System.out.println(key.getName()+','+key.getAge()+','+value);
}
}
}
运行结果:
Tom,9,UK
Bob,91,Ja
Tim,19,CN
- 案例:ArrayList集合存储HashMap元素并遍历
需求:创建一个ArrayList集合,存储三个元素,每一个元素都是HashMap,每一个HashMap的键和值都是String,并遍历。
分析:
(1)创建ArrayList集合;
(2)创建HashMap集合,并添加键值对元素;
(3)把HashMap作为元素添加到ArrayList集合;
(4)遍历ArrayList集合。
完整代码:
package com.xuexi;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
public class Demo8 {
public static void main(String[] args) {
//创建ArrayList集合
ArrayList<HashMap<String,String>> array = new ArrayList<HashMap<String,String>>();
//创建HashMap集合,并添加键值对元素
HashMap<String,String> hm1 = new HashMap<String,String>();
hm1.put("aaa","AAA");
hm1.put("bbb","BBB");
//把HashMap作为元素添加到ArrayList集合
array.add(hm1);
HashMap<String,String> hm2 = new HashMap<String,String>();
hm2.put("ccc","CCC");
hm2.put("ddd","DDD");
//把HashMap作为元素添加到ArrayList集合
array.add(hm2);
HashMap<String,String> hm3 = new HashMap<String,String>();
hm3.put("eee","EEE");
hm3.put("fff","FFF");
//把HashMap作为元素添加到ArrayList集合
array.add(hm3);
//遍历ArrayList集合。
for (HashMap<String,String> hm : array){
Set<String> keySet = hm.keySet();
for (String key : keySet){
String value = hm.get(key);
System.out.println(key+','+value);
}
}
}
}
运行结果:
aaa,AAA
bbb,BBB
ccc,CCC
ddd,DDD
eee,EEE
fff,FFF
- 案例:HashMap集合存储ArrayList元素并遍历
需求:创建一个HashMap集合,存储三个键值对元素,每一个键值对元素的键是String,值是ArrayList,每一个ArrayList的元素是String,并遍历。
分析:
(1)创建HashMap集合;
(2)创建ArrayList集合,并添加键值对元素;
(3)把ArrayList作为元素添加到HashMap集合;
(4)遍历HashMap集合。
完整代码:
package com.xuexi;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
public class Demo9 {
public static void main(String[] args) {
//创建HashMap集合
HashMap<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();
//创建ArrayList集合,并添加元素
ArrayList<String> arrayList1 = new ArrayList<String>();
arrayList1.add("AAA");
arrayList1.add("DDD");
//把ArrayList作为元素添加到HashMap集合
map.put("ad",arrayList1);
//创建ArrayList集合,并添加元素
ArrayList<String> arrayList2 = new ArrayList<String>();
arrayList2.add("BBB");
arrayList2.add("EEE");
//把ArrayList作为元素添加到HashMap集合
map.put("be",arrayList2);
//创建ArrayList集合,并添加元素
ArrayList<String> arrayList3 = new ArrayList<String>();
arrayList3.add("CCC");
arrayList3.add("FFF");
//把ArrayList作为元素添加到HashMap集合
map.put("cf",arrayList3);
//遍历HashMap集合
Set<String> keySet = map.keySet();
for (String key : keySet){
System.out.println(key);
ArrayList<String> value = map.get(key);
for (String s : value){
System.out.println("\t"+s);
}
}
}
}
运行结果:
ad
AAA
DDD
be
BBB
EEE
cf
CCC
FFF
Process finished with exit code 0
- 案例:统计字符串中每个字符出现的次数
需求:键盘录入一个字符串,要求统计字符串中每个字符串出现的次数。
举例:键盘录入:“aababcabcdabcde"
在控制台输出:“a(5)b(4)c(3)d(2)e(1)”
分析:
(1)我们可以把结果分为几个部分来看:a(5),b(4),c(3),d(2),e(1);
(2)每一个部分可以看成是:字符和字符对应的次数组成;
(3)这样的数据,可以通过HashMap集合来存储,键是字符,值是字符出现的次数。
注:键是字符,类型应该是Character;值是字符出现的次数,类型应该是Integer.
思路:
(1)键盘录入一个字符串;
(2)创建HashMap集合,键是Character,值是Integer;
(3)遍历字符串,得到每一个字符;
(4)拿得到的每一个字符作为键得到HashMap集合中去找对应的值,看其返回值:
如果是返回值是null,说明该字符在HashMap集合中不存在,就把该字符作为键,1作为值存储;
如果是返回值不是null,说明该字符在HashMap集合中存在,把该值加1,然后重新存储该字符和对应的值;
(5)遍历HashMap集合,得到键和值,按照要求进行拼接;
(6)输出结果。
完整代码:
package com.xuexi;
import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;
public class Demo10 {
public static void main(String[] args) {
//键盘录入一个字符串
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串");
String line = sc.nextLine();
//创建HashMap集合,键是Character,值是Integer;
// HashMap<Character,Integer> hm = new HashMap<Character, Integer>();//无排序
TreeMap<Character,Integer> hm = new TreeMap<Character, Integer>();//排序
//遍历字符串,得到每一个字符;
for (int i=0; i<line.length(); i++){
char key = line.charAt(i);
//拿得到的每一个字符作为键得到HashMap集合中去找对应的值,看其返回值:
Integer value = hm.get(key);
if (value==null){
//如果是返回值是null,说明该字符在HashMap集合中不存在,就把该字符作为键,1作为值存储;
hm.put(key,1);
}else{
//如果是返回值不是null,说明该字符在HashMap集合中存在,把该值加1,然后重新存储该字符和对应的值;
value++;
hm.put(key,value);
}
}
//遍历HashMap集合,得到键和值,按照要求进行拼接;
StringBuilder sb = new StringBuilder();
Set<Character> keySet = hm.keySet();
for (Character key : keySet){
Integer value = hm.get(key);
sb.append(key).append("(").append(value).append(")");
}
String result = sb.toString();
//输出结果
System.out.println(result);
}
}
运行结果:
请输入一个字符串
aababcabcdabcde
a(5)b(4)c(3)d(2)e(1)