java 重写HashCode和equals方法以及 HashMap集合 增 删 改 查

1. 自定义类 Person

public class Person {
    
    private String name;
    private int age;
    private String sex;
    
    public Person(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    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;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + age;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        result = prime * result + ((sex == null) ? 0 : sex.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;
        if (sex == null) {
            if (other.sex != null)
                return false;
        } else if (!sex.equals(other.sex))
            return false;
        return true;
    }
    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + ", sex=" + sex + "]";
    }
    

}

2.  demo类

/**
 * 将对象做为HashMap的key,所以对象要重写hashcode方法和equals方法
 * @author bruce
 *
 */
public class HashMapDemo {
    
    public static void main(String[] args) {
        
        Map<String, String> map = new HashMap<String, String>();
        map.put("1", "2");
        map.put("2", "3");
        map.put("3", "4");
        map.put("4", "5");
        map.put("5", "6");
        map.put("6", "7");
        map.put("7", "8");
        map.put("8", "9");
        
//        addMap(map);
//        deleteMap(map);
//        editMap(map);
        findMap(map);
        
        
    }
    
    /**
     * 如果没有重写hashcode和equals方法此处输出两个xiaosan
     */
    @Test
    public void objectHashMapKey(){
        Map<Person, String> map = new HashMap<Person, String>();
        map.put(new Person("xiaosan", 23, "女"), "上海");
        map.put(new Person("liuhai", 26, "男"), "北京");
        map.put(new Person("xiaosan", 23, "女"), "上海");
        map.put(new Person("xiaolan", 23, "女"), "深圳");
        
        Iterator<Person> iterator = map.keySet().iterator();
        while(iterator.hasNext()){
            Person person = iterator.next();
            System.out.println(map.get(person));
        }
    }

    private static void findMap(Map<String, String> map) {
        String value = "3";
        Set<String> set = map.keySet();
        Iterator<String> iterator = set.iterator();
        while(iterator.hasNext()){
            String key = iterator.next();
            if(map.get(key).equals(value)){
                System.out.println("找到了,对应的 key = " + key);
                break;
            }
        }
    }

    private static void editMap(Map<String, String> map) {
        System.out.println("原map大小 = " + map.size());
        Set<String> set = map.keySet();
        Iterator<String> iterator = set.iterator();
        while(iterator.hasNext()){
            String key = iterator.next();
            if(map.get(key).equals("3")){
                System.out.println("在这里修改,修改前 key = " + key + "  value = " + map.get(key));
                map.put(key, "小三");
            }
        }
        printMap(map);
        
    }

    private static void deleteMap(Map<String, String> map) {
        System.out.println("原map大小 = " + map.size());
        Set<String> set = map.keySet();
        Iterator<String> iterator = set.iterator();
        while(iterator.hasNext()){
            String key = iterator.next();
            if(map.get(key).equals("3")){
                iterator.remove();
            }
        }
        printMap(map);
        
    }

    private static void addMap(Map<String, String> map) {
        System.out.println("原map大小 = " + map.size());
        map.put("000", "000");
        printMap(map);
    }
    
    public static void printMap(Map<String, String> map){
        int i = 0;
        for(String string : map.keySet()){
            i++;
            System.out.println("第" + i+" key = "+string+" value = "+map.get(string));
        }
        System.out.println("修改后map大小 = " + map.size());
    }

}



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值