首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

java基础之HashTable

Hashtable继承Map接口,同样实现一个key-value映射的哈希表。其数据结构同样基于数组加链表,任何非空(non-null)的对象都可作为key或者value。

Hashtable通过initial capacity和load factor两个参数调整性能。通常缺省的load factor 0.75也和hashMap相同。

由于作为key的对象将通过获取它的hashcode来确定与之对应的value的位置,因此任何作为key的对象都必须实现hashCode和equals方法,因为HashTable直接调用对象的方法。hashCode和equals方法继承自根类Object,如果你用自定义的类当作key的话,要相当小心,按照散列函数的定义,如果两个对象相 同,即obj1.equals(obj2)=true,则它们的hashCode必须相同,但如果两个对象不同,则它们的hashCode不一定不同,

如果两个不同对象的hashCode相同,这种现象称为冲突,即两个对象在同一链表上存储,冲突会导致操作哈希表的时间开销增大,所以尽量定义好的hashCode()方法,能加快哈希表的操作。

如果相同的对象有不同的hashCode,对哈希表的操作会出现意想不到的结果,要避免这种问题,要牢记一条:要同时覆写equals方法和hashCode方法,而不是只写其中一个。

HashTable是线程安全的,和HashMap不同

HashTable在不指定容量的情况下的默认容量为11,而HashMap为16,Hashtable不要求底层数组的容量一定是为2的n次方,而HashMap则一定为2的n次方。

Hashtable扩容时,将容量变为原来的2倍加1,而HashMap扩容时,将容量变为原来的2倍。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200106A042AA00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券