中易网

为什么HashTable的默认大小和HashMap不一样

答案:2  悬赏:80  
解决时间 2021-04-22 23:26
为什么HashTable的默认大小和HashMap不一样
最佳答案
Hashtable的扩容是这样做的:
int oldCapacity = table.length;
int newCapacity = oldCapacity * 2 + 1;

虽然不保证capacity是一个质数,但至少保证它是一个奇数。

Hashtable的寻址是这样做的:
Entry tab[] = table;
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;

直接用key的hashCode(),不像HashMap里为了增强hash的分散效果而要做二次hash(这里例子用JDK6版,老一点方便):

static int hash(int h) {
// This function ensures that hashCodes that differ only by
// constant multiples at each bit position have a bounded
// number of collisions (approximately 8 at default load factor).
h ^= (h >>> 20) ^ (h >>> 12);
return h ^ (h >>> 7) ^ (h >>> 4);
}

int hash = (key == null) ? 0 : hash(key.hashCode()); // 二次hash
table[indexFor(hash, table.length)]
全部回答
1 hashmap不是线程安全的 hastmap是一个接口 是map接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。hashmap允许null key和null value,而hashtable不允许。 2 hashtable是线程安全的一个collection。 hashmap是hashtable的轻量级实现(非线程安全的实现),他们都完成了map接口,主要区别在于hashmap允许空(null)键值(key),由于非线程安全,效率上可能高于hashtable。 hashmap允许将null作为一个entry的key或者value,而hashtable不允许。 hashmap把hashtable的contains方法去掉了,改成containsvalue和containskey。因为contains方法容易让人引起误解。 hashtable继承自dictionary类,而hashmap是java1.2引进的map interface的一个实现。 最大的不同是,hashtable的方法是synchronize的,而hashmap不是,在多个线程访问hashtable时,不需要自己为它的方法实现同步,而hashmap 就必须为之提供外同步。 hashtable和hashmap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。 public static void main(string args[]) { hashtable h=new hashtable(); h.put("用户1",new integer(90)); h.put("用户2",new integer(50)); h.put("用户3",new integer(60)); h.put("用户4",new integer(70)); h.put("用户5",new integer(80)); enumeration e=h.elements(); while(e.hasmoreelements()){ system.out.println(e.nextelement()); } map 的方法: clear()从 map 中删除所有映射 remove(object key)从 map 中删除键和关联的值 put(object key, object value)将指定值与指定键相关联 get(object key)返回与指定键关联的值 containskey(object key)如果 map 包含指定键的映射,则返回 true containsvalue(object value)如果此 map 将一个或多个键映射到指定值,则返回 true isempty()如果 map 不包含键-值映射,则返回 true size()返回 map 中的键-值映射的数目
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
大骥村在什么地方啊,我要过去处理事情
从沈阳北站到铁西区滑翔生日城坐公交车要多久
和台村地址在哪,我要去那里办事
纹眉失败能直接重改眉型吗
房屋中介怎么收费
广州开发区捷普电子厂怎么样 普工底薪多少?
文科可以报考医学院吗 ?今年收大专生吗?
通知员工做好述职怎样拟文件
诺基亚6500S喇叭怎么不行啊 .滑盖间隙也大啊
有才能的~!文艺组织天才的来看看复制没分
脐带绕颈的都是男孩吗?
桂庙村地址有知道的么?有点事想过去
木质地板怎样好清理
从淘宝买了两只仓鼠熊。周五收的货。今天死了
郑州花园路晚上有什么好玩的地方??
推荐资讯
搜狐媒体平台推广位显示这样是成功了吗?
那家那个牌子麻辣烫好吃
依恋婚庆策划有限公司地址有知道的么?有点事
为什么下了最新flash,还是不显示?
我用ImageReady在图片上加了字为什么存出来变
恒鑫移动营业厅地址有知道的么?有点事想过去
中兴南路/升平一路(路口)地址在哪,我要去那
到广西桂林福利院领养小孩需要满足那些条件和
大连市金州区石河人办理结婚登记到哪里办
韩国兰芝护肤品套装都有哪几样
我不小心把镜子打碎了,有什么说法吗?
农民买房要哪些证件还有怎么办代款
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?