一.认识HashMap
HashMap的特点:无序,不重复,无索引
保证键的唯一:
二.HashMap案例
案例一:存储学生对象并遍历
注意点: hashMap的键如果存放的是自定义对象,需要重写hashCode和equals方法
student类:需要重新写hashCode和equals方法
package com.chen.集合.bao1;
import java.util.Objects;
public class Student {
private String name;
private String age;
public Student() {
}
public Student(String name, String age) {
this.name = name;
this.age = age;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return age
*/
public String getAge() {
return age;
}
/**
* 设置
* @param age
*/
public void setAge(String age) {
this.age = age;
}
public String toString() {
return "Student{name = " + name + ", 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 Objects.equals(name, student.name) && Objects.equals(age, student.age);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
package com.chen.集合.bao1;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class DemoTest {
public static void main(String[] args) {
HashMap<Student,String> students_map=new HashMap<>();
//创建学生对象
Student student1 = new Student("张三", "23");
Student student2 = new Student("王五", "18");
Student student3 = new Student("李四", "32");
Student student4 = new Student("李四", "66");
Student student5 = new Student("李四", "66");
//添加籍贯
students_map.put(student1,"江苏");
students_map.put(student2,"浙江");
students_map.put(student3,"上海");
students_map.put(student4,"北京");
//同名同年龄认为是同一个人
students_map.put(student5,"珠江");
Set<Map.Entry<Student, String>> entries = students_map.entrySet();
for (Map.Entry<Student, String> entry : entries) {
Student key = entry.getKey();
String value = entry.getValue();
System.out.println(key+":"+value);
}
}
}
案例二:统计投票人数
键值对:景点:次数
效果:
package com.chen.集合.bao2;
import java.util.*;
public class DemoTest {
public static void main(String[] args) {
//定义一个数组,存储四个景点
String [] arr={"A","B","C","D"};
Random random = new Random();
//模拟80个同学投票,list存储投票结果
//ArrayList:顺序存储,允许重复
//list存的是A,B,C,D
ArrayList<String> list = new ArrayList<>();
for (int i = 0; i < 80; i++) {
int index = random.nextInt(arr.length);
list.add(arr[index]);
}
//统计
HashMap<String,Integer> hashMap=new HashMap<>();
for (String name : list) {
if(hashMap.containsKey(name)){
//已经存在
//投票次数+1
int count = hashMap.get(name);
count++;
hashMap.put(name,count);
}else {
//景点第一次出现
hashMap.put(name,1);
}
}
//求最大值
//A ???
//B ???
//C ???
//D ???
Set<Map.Entry<String, Integer>> entries = hashMap.entrySet();
for (Map.Entry<String, Integer> entry : entries) {
int count = entry.getValue();
String place = entry.getKey();
System.out.println(place+":"+count);
}
int max=0;
for (Map.Entry<String, Integer> entry : entries) {
int count = entry.getValue();
if(count>max){
max=count;
}
}
for (Map.Entry<String, Integer> entry : entries) {
int count = entry.getValue();
if(count==max){
String key = entry.getKey();
System.out.println("最大值是"+key);
}
}
}
}