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语言不直接支持关联数组,可以使用任何对象作为一个索引的数组,但在根Object类中使用 hashCode()方法明确表示期望广泛使用HashMap。理想情况下基于散列的容器提供有效插入和有效检索;直接在对象模式...
原因是因为,在Java自带的容器HashMap和HashSet中, 都需同时要用到对象的hashCode()和equals()方法来进行判断,然后再插入删除元素,这点我们一会再谈。 那么我们还是单独来看hashCode(),为什么HashMap需要用到...
1.hashcode是用来查找的,如果你学过数据结构就应该知道,在查找和排序这一章有例如内存中有这样的位置而我有个类,这个类有个字段叫ID,我要把这个类存放在以
13.HashMap为什么不直接使用hashCode()处理后的哈希值直接作为table的下标? 14.HashMap 的长度为什么是2的幂次方? 15.HashMap 与 HashTable 有什么区别? 16.如何决定使用 HashMap 还是 TreeMap? 17.HashMap 和 ...
面试时经常会问起字符串比较相关的问题,比如:字符串比较时用的什么方法,内部实现如何?hashcode的作用,以及重写equal方法,为什么要重写hashcode方法?以下就为大家解答,需要的朋友可以参考下
HashMap数据结构,HashMap的构造方法,HashMap的put,HashMap的get
hashmap实例 hashmap实例hashmap实例hashmap实例
hashmap相关的面试题
HashMap介绍和使用
HashMap是一个散列桶(数组和链表),它存储的内容是键值对(key-value)映射HashMap采用了数组和链表的数据结构,能在查询和修改方便继承了数组的线性查找和链表的寻址修改HashMap是非synchronized,所以HashMap很快...
HashMap存放.doc
hashmap的底层及源码解析,很适合大家的学习,不要积分。
HashMap为什么是线程不安全的?如何解决HashMap的线程不安全问题?
哈希函数用的是java中String.hashCode()算法(经实际验证其碰撞率极低且相近的文本散列值相邻,存取的效率更高.)。可自动无限增加容量(内存允许)。3、连续10万次不同内容存取效率为,存10万次共耗时约280ms ,取10万次...
hashMap排序,hashmap使用还是比较频繁。这时自己写的一个实现hashmap排序的例子
Javascript实现和操作HashMap,压缩包里面有hashmap定义和操作的例子
HashMap底层实现原理HashMap与HashTable区别HashMap与HashSet区别。HashMap、HashTable和HashSet是Java中常用的数据结构,它们的底层实现原理以及区别如下:HashMap底层实现原理: HashMap基于哈希表(HashTable)...
模拟java中的HashMap类js类对象,可以与js的Array类对象配合使用
Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序...