java基础之HashMap类

目录

一:HashMap类概述

二:HashMap类中几种不同键值对举例

1:HashMap<String,String>

2:HashMap<String,Student>

3:HashMap<Student,String>

4:对象做key需要判断对象的成员变量是否一样,要重写equals方法

三:HashMap和Hashtable的区别

1、相同点

2、不同点



一:HashMap类概述

(重写了getValue和getKey方法)

键是哈希表结构,可以保证键的唯一性

注意:HashMap类继承于Map接口重写了它的方法,所以方法基本和Map一样

二:HashMap类中几种不同键值对举例

1:HashMap<String,String>

package protice5;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Test1 {
    public static void main(String[] args) {
        //创建HashMap对象并且指定泛型key和value都是字符串类型
        HashMap<String, String> s = new HashMap<String, String>();
        //向HashMap中添加元素
        s.put("001", "hello");
        s.put("002", "java");
        s.put("003", "java");
        s.put("004", "hadoop");
        //得到key的集合并用增强for循环遍历输出
        Set<String> strings = s.keySet();
        for (String string : strings) {
            System.out.println(string);
        }
        System.out.println("=============================");
        //得到value的集合并用增强for循环遍历输出
        Collection<String> values = s.values();
        for (String value : values) {
            System.out.println(value);
        }
        System.out.println("=============================");
        //得到所有的键值对然后遍历输出
        Set<Map.Entry<String, String>> entries = s.entrySet();
        for (Map.Entry<String, String> entry : entries) {
            System.out.println(entry.getKey()+"**"+entry.getValue());
        }
    }
}

2:HashMap<String,Student>

package protice5;

public class Student {
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Student() {
    }

    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 String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
package protice5;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Test3 {
    public static void main(String[] args) {
        //创建HashMap对象并且指定泛型key和value都是字符串类型
        HashMap<String, Student> s = new HashMap<String, Student>();
        Student s1 = new Student("小花", 18);
        Student s2 = new Student("小北", 19);
        Student s3 = new Student("小李", 20);
        Student s4 = new Student("小可", 17);
        s.put("001", s1);
        s.put("002", s2);
        s.put("003", s3);
        s.put("004", s4);
       //得到key的集合并用增强for循环遍历输出
        Set<String> strings = s.keySet();
        for (String string : strings) {
            System.out.println(string);
        }
        System.out.println("=============================");
        //得到value的集合并用增强for循环遍历输出
        Collection<Student> values = s.values();
        for (Student value : values) {
            System.out.println(value.getName()+"**"+value.getAge());
        }
        System.out.println("=============================");
        //得到所有的键值对然后遍历输出
        Set<Map.Entry<String, Student>> entries = s.entrySet();
        for (Map.Entry<String, Student> entry : entries) {
            System.out.println(entry.getKey()+"**"+entry.getValue());
        }


    }
}

3:HashMap<Student,String>

package protice5;

import java.util.Objects;

public class Student {
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Student() {
    }

    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 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 age == student.age &&
                Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {

        return Objects.hash(name, age);
    }
}
package protice5;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Test4 {
    public static void main(String[] args) {
        HashMap<Student, String> s = new HashMap<Student, String>();
        Student s1 = new Student("小花", 19);
        Student s2 = new Student("小花", 19);
        Student s3 = new Student("小李", 20);
        Student s4 = new Student("小可", 17);
        s.put( s1,"001");
        s.put( s2,"002");
        s.put( s3,"003");
        s.put( s4,"004");
        Set<Map.Entry<Student, String>> entries = s.entrySet();
        for (Map.Entry<Student, String> entry : entries) {
            System.out.println(entry.getKey()+"**"+entry.getValue());
        }

    }
}

4:对象做key需要判断对象的成员变量是否一样,要重写equals方法

如果不重写equals方法结果是

 因为Student没有重写equals方法则默认比较的是地址值

san:HashMap和Hashtable的区别

1、相同点

它们存储的元素类型都是K-V格式的

使用起来一样

2、不同点

 1)Hashtable是线程安全的HashMap不是线程安全的

2)Hashtable的key的值和value的值都不允许为null,而HashMap可以

Guess you like

Origin blog.csdn.net/weixin_50691399/article/details/121041983