zoukankan      html  css  js  c++  java
  • HashMap测试程序2

    package com.iotek.map;

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

    public class HashMapDemo2 {

    /**
    * @param args
    */
    public static void main(String[] args) {
    Map<Student,String> map = new HashMap<Student,String>();
    //<Student,String> 来限定map中存放的键为Student类型,值为String类型
    map.put(new Student("jay",20), "张三"); //1
    map.put(new Student("lisi",30), "李四");//2
    map.put(new Student("rose",20), "玫瑰");//3
    map.put(new Student("lisi",30), "陈飞");//4
    System.out.println(map.size());
    System.out.println(map);
    /*
    * Student类中不重写hashCode() and equals()方法,此处map.size()值是4,即map中有4个封装了键值对的Entry对象
    * 重写了hashCode()和equals()方法后,2和4语句里的学生对象将被判断为同一个键名,因此2位置处的键值会被替换掉
    * 这正是我们需要的,对象相同,应该判定为是同一个键,因此,这就是需要重写hashCode()和equals()方法的原因
    */
    }

    }

    class Student {
    private String name;
    private int age;

    @Override
    /*
    * 用source中的 Generate hashCode() and equals() 来
    * 生成重写的hashCode()方法和equals()方法
    * 只要姓名和年龄相同的学生,那么这个学生对象产生的hashCode值和equals方法的值也是一样的,
    * 此时就可以认为是hashmap里放的是同一个对象,那么这两个相同的Student对象作为键时,
    * 后面添加的Student对象对应的键值应该要覆盖掉前面添加的键值
    * */
    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;
    Student other = (Student) 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; //只有当姓名和年龄都一样时,才返回一个true,表示是同一个对象
    }
    public Student(String name, int age) {
    super();
    this.name = name;
    this.age = 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;
    }

    }

  • 相关阅读:
    MySQL 资源大全中文版
    Linux性能实时监测工具 Netdata
    《Linux大棚》博客
    GNU bash实现机制与源代码简析
    C#+ArcGIS Engine 获取地图中选中的要素
    arcgis engine 获取高亮Feature、element
    DotNetBar 源码与安装版本
    ArcGIS 按多边形区域统计栅格影像的一些信息
    ArcGIS 空间查询
    55.npm install 报错 :stack Error: Can't find Python executable "python"
  • 原文地址:https://www.cnblogs.com/enjoyjava/p/6876328.html
Copyright © 2011-2022 走看看