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;
}
}
分享到:
相关推荐
如果`MyObject`类作为键使用,那么必须正确实现`hashCode()`和`equals()`方法,以确保`containsKey()`能够准确地找到对应的键值对。 #### 其他知识点 - **JAVA关键字**:题目四和五测试了对JAVA关键字的熟悉程度,...
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中,当使用这些数据结构时,键对象必须正确地实现`equals()`和`hashCode()`方法。如果不这样做,可能导致内存中的重复元素,占用额外的内存空间。以下是一个例子: ```java class KeylessEntry { static ...
- **实现方法**:`equals(Object o)`, `hashCode()`, `toString()`, `isEmpty()`, `size()`等。 - **抽象方法**:`containsKey(Object key)`, `containsValue(Object value)`, `get(Object key)`, `put(K key, V ...
- `toString`方法用于返回对象的字符串表示形式,而`equals`方法用于比较两个对象是否相等。 - `hashCode`方法用于返回对象的哈希码值,这对于某些集合类(如`HashSet`)来说非常重要。 #### 七、List接口实现 **...
- `HashMap`: `put()`, `get()`, `remove()`, `containsKey()`, `containsValue()`, `size()`, `isEmpty()`, `clear()`, `keySet()`, `values()`, `entrySet()` 16. **HashMap底层实现原理** - `HashMap`基于哈希...
- `hashCode()`:返回对象的哈希码,用于散列存储,比如HashMap中。 - `notify()`:唤醒在该对象监视器上等待的单个线程。 - `notifyAll()`:唤醒在该对象监视器上等待的所有线程。 - `toString()`:返回对象的...