HashMap集合

HashMap集合特点(用法与特点类似于HashSet集合):

1.无序,不允许重复(无序指元素顺序与添加顺序不一致);
2.底层数据结构是哈希表
3.HashMap内部对”键”用Set进行散列存放。所以根据”键”去取”值”的效率很高。
4.键是唯一的,值是可以重复的
5.能出现最多一个null键,任意多个null值

剔除重复的原理—–>同HashSet

先调用hashCode,若相同,再调用equals
可根据自己的需求重写hashCode和equals
注意:这里只是比较键值是否重复,不需要比较value值

练习:

定义一个Person类,属性有name,age。
若名字和年龄相同,则为同一个对象。
创建一个HashSet集合,键为Person类,值为个人评价
并遍历HashSet集合。

Person类

package HashMap;
//定义一个Person类,属性有name,age。
//若名字和年龄相同,则为同一个对象。
//创建一个HashSet集合,键为Person类,值为个人评价
public class Person {
    private String name;
    private int 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 String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }
    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    public Person() {
        super();
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + age;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Person other = (Person) obj;
        if (age != other.age)
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }
}

测试类:

package HashMap;

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

public class Test {

    public static void main(String[] args) {
        HashMap<Person, String> map=new HashMap<>();
        //若名字和年龄相同,则为同一个对象
        map.put(new Person("乔布斯", 90), "苹果之父,非常厉害的人!");
        map.put(new Person("乔布斯", 90), "我以前没用听说过他,孤陋寡闻了!!");
        map.put(new Person("乔布斯1", 90), "我以前没用听说过他,孤陋寡闻了!!");
        map.put(new Person("琼斯", 50), "我以前没用听说过他,孤陋寡闻了!!");

        Set<Person> set=map.keySet();
        for (Person person : set) {
            System.out.println(person+","+map.get(person));
        }
    }
}
posted @ 2017-04-18 21:13  TCB_Java  阅读(218)  评论(0编辑  收藏  举报