特点:

  1. HashMap是Map里面的一个实现类
  2. 没有额外需要学习的特有方法,直接使用Map里面的方法就可以了
  3. 特点都是由键决定的:无序,不重复,无索引
  4. 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!!!!!!.