一,首先说说HashTable与Map的区别
1.Map是一个接口,而HashTable是一个具体的实现,是Dictionary的具体实现。说HashTable是Map的准确点来说接口是不准确的。
2.Map可以通过key,value和key-value对迭代,而HashTable只支持前两种迭代方式。
3.HashTable中的contains根据传入的value返回布尔值。Map接口同时提供containsValue和containsKey两种方法。
二,HashTable和HashMap的区别
1.HashTable是Disctionary的具体实现,HashMap是继承Map接口。
2.HashTable是同步,线性安全的,效率慢。HashMap是非同步,线性不安全的,通过Map Collection.synchronizedMap(Map m)来获得线性安全。
3.HashTable不允许null key,null value;而HashMap允许。
4.HashTable有contains方法,HashMap分为containsKey和containsVaule方法。
三,hashcode和equals方法
由于作为key的对象将通过计算其散列函数来确定与之相对应的value的位置,因此任何作为key的对象都必须实现hashcode和equals的方法。
hashcode和equals的方法继承自根类Object,如果你用自定义的类当作key的话,要相当小心,按照散列函数的定义,如果两个对象相同,即obj1.equals(obj2)=true,则它们的hashCode必须相同,但如果两个对象不同,则它们的hashCode不一定不同,如果两个不同对象的hashCode相同,这种现象称为冲突,冲突会导致操作哈希表的时间开销增大,所以尽量定义好的hashCode()方法,能加快哈希表的操作。如果相同的对象有不同的hashCode,对哈希表的操作会出现意想不到的结果(期待的get方法返回null),要避免这种问题,只需要牢记一条:要同时复写equals方法和hashCode方法,而不要只写其中一个。