特点:
- HashMap是Map里面的一个实现类
- 没有额外需要学习的特有方法,直接使用Map里面的方法就可以了
- 特点都是由键决定的:无序,不重复,无索引
- HashMap跟HashSet底层原理是一模一样的,都是哈希表结构
总结:
-
HashMap底层是哈希表的结构
-
依赖hashCode方法和equals方法保证键的唯一
-
如果键存储的是自定义对象,需要重写hashCode和equals方法
如果值存储自定义对象,不需要重写hashCode和eqauls方法
------------------------^<>^--------------------------
案例1:
存储学生对象并遍历
需求:
创建一个HashMap集合,键是学生对象(Student),值是籍贯(String)
存储三个键值对元素,并遍历
要求:同姓名,同年龄是同一个学生。。。。。。
public class Studentt implements Comparable<Studentt> {
private String name;
private int age;
public Studentt() {
}
public Studentt(String name, int 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 int getAge() {
return age;
}
/**
* 设置
* @param age
*/
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() { //千万不要忘了写
return "Studentt{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public int compareTo(Studentt o) {
//按照学生年龄的升序排列,年龄一样按照姓名的字母排列
// 同姓名年龄视为同一个人
//this:表示当前要添加的元素
//o: 表示已经在红黑树中存在的元素
//返回值:
//负数:表示当前要添加的元素是小的,存左边
//正数:表示当前要添加的元素是大的,存右边
//0:表示当前要添加的元素已经存在,舍弃。
int i=this.getAge()-o.getAge();
i=i== 0?this.getName().compareTo(o.getName()):i;
return i;
}
}
import java.util.HashMap;
import java.util.Set;
public class HashMap {
public static void main(String[] args) {
//1.创建HashMap的对象
HashMap<Studentt, String> hm = new HashMap<>();
//2.创建三个学生对象
Studentt s1=new Studentt("张三",23);
Studentt s2=new Studentt("李四",25);
Studentt s3=new Studentt("王五",26);
//3.添加元素
hm.put(s1,"陕西");
hm.put(s2,"吉林");
hm.put(s3,"哈尔滨");
//4.遍历集合
//Set<Studentt> keys=hm.keySet();
/*for (Studentt key : keys) {
String value=hm.get(key);
System.out.println(value);
} */
hm.forEach((k,v) -> System.out.println(k));
}
}
就到这里啦!!!!!baibai!!!!!!.