`
DataBird
  • 浏览: 72164 次
  • 性别: Icon_minigender_1
  • 来自: 湖南长沙
社区版块
存档分类
最新评论

HashMap containsKey toString equals hashCode

 
阅读更多
HashMap containsKey toString equals hashCode
HashMap的key一般是自定义类,一定要重载toString、equals和hashCode方法,
这样才能使用HashMap.containsKey()方法判断是否包含该该键值,否则永远都是假!
这里要巧妙利用重载toString方法,来提供自定义类的唯一标识。

RecordNumber是自定义类,由3个字段组成,如果这3个字段都相同,就认为该类实例相同,
toString方法非常容易构造这种这个条件。

//如果 Main.hmMyDB 包含 Main.hmDS.keySet(),就不需要动作,不含就动作
System.out.println("需要压栈的任务是");
for (RecordNumber v_rn : Main.hmDS.keySet()) {
    if (!Main.hmMyDB.containsKey(v_rn)) {
        Main.taskStack.add(v_rn);
        System.out.println("压栈"+v_rn);
    } else {
        System.out.println("MyDB已经包含");
    }
}
       
  public boolean equals(Object O) {
    return (O instanceof MyClass) &&
      toString().equals(((MyClass)O).toString());
  }
 
//数据源 表名 时间 (记录数量)
public class RecordNumber {

    public final String DataSource;
    public final String TableName;
    public final Date DateTime;

    public RecordNumber(String DataSource, String TableName, Date DateTime) {
        this.DataSource = DataSource;
        this.TableName = TableName;
        this.DateTime = DateTime;
    }

    @Override
    public String toString() {
        return (this.DataSource + "**" + this.TableName + "**" + this.DateTime);
    }


    @Override
    public boolean equals(Object o) {
        return (o instanceof RecordNumber)
                && toString().equals(((RecordNumber) o).toString());
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 37 * hash + (this.DataSource != null ? this.DataSource.hashCode() : 0);
        hash = 37 * hash + (this.TableName != null ? this.TableName.hashCode() : 0);
        hash = 37 * hash + (this.DateTime != null ? this.DateTime.hashCode() : 0);
        return hash;
    }
}
 
分享到:
评论

相关推荐

    JAVA中软面试题

    如果`MyObject`类作为键使用,那么必须正确实现`hashCode()`和`equals()`方法,以确保`containsKey()`能够准确地找到对应的键值对。 #### 其他知识点 - **JAVA关键字**:题目四和五测试了对JAVA关键字的熟悉程度,...

    ffmpeg-20170620-ae6f6d4-win64

    Map, Object> map=new HashMap, Object>(); map.put("fp", "D:/Program Files/ffmpeg/bin/ffmpeg"); map.put("name", "test3"); map.put("input", "rtsp://admin:admin@192.168.2.236:37779/cam/realmonitor?...

    编写Java代码制造一个内存溢出的情况

    在Java中,当使用这些数据结构时,键对象必须正确地实现`equals()`和`hashCode()`方法。如果不这样做,可能导致内存中的重复元素,占用额外的内存空间。以下是一个例子: ```java class KeylessEntry { static ...

    java.util包源码pdf版

    - **实现方法**:`equals(Object o)`, `hashCode()`, `toString()`, `isEmpty()`, `size()`等。 - **抽象方法**:`containsKey(Object key)`, `containsValue(Object value)`, `get(Object key)`, `put(K key, V ...

    java基础重点难点

    - `toString`方法用于返回对象的字符串表示形式,而`equals`方法用于比较两个对象是否相等。 - `hashCode`方法用于返回对象的哈希码值,这对于某些集合类(如`HashSet`)来说非常重要。 #### 七、List接口实现 **...

    Java后端面试题大纲(涵盖了百分之九十的考点).pdf

    - `HashMap`: `put()`, `get()`, `remove()`, `containsKey()`, `containsValue()`, `size()`, `isEmpty()`, `clear()`, `keySet()`, `values()`, `entrySet()` 16. **HashMap底层实现原理** - `HashMap`基于哈希...

    浅析Java类和数据结构中常用的方法

    - `hashCode()`:返回对象的哈希码,用于散列存储,比如HashMap中。 - `notify()`:唤醒在该对象监视器上等待的单个线程。 - `notifyAll()`:唤醒在该对象监视器上等待的所有线程。 - `toString()`:返回对象的...

Global site tag (gtag.js) - Google Analytics