Java中HashMap和Hashtable之间的区别
内容
HashMap和Hashtable都用来表示一个 对象组 在中表示
让我们查看下面显示的比较表,以了解HashMap和Hashtable之间的更多区别。
- 比较表
- 定义
- 关键差异
- 相似点
- 结论
比较表
比较基础 | 哈希图 | 哈希表 |
---|---|---|
实施/扩展 | HashMap类实现Map接口并扩展AbstractMap类。 | Hashtable是Dictionary Legacy类的扩展,但经过了重新设计,现在还实现了Map接口。 |
同步化 | HashMap是不同步的,因此HashMap对象不是线程安全的。 | Hashtable是同步的,因此Hashtable的对象是线程安全的。 |
键/值 | 键只能返回一次Null,但是一个值可以多次返回Null。 | 密钥不能返回Null,因为它用于获取将用作哈希表索引的哈希码,而值也不能返回Null。 |
默认初始容量 | HashMap的默认初始容量为16。 | 哈希表的默认初始容量为11。 |
遍历 | HashMap被Iterator遍历。 | 与Map类一样,Hashtable也不直接支持Iterator进行遍历,因此它使用Enumerator。 |
HashMap的定义
HashMap是一个实现 地图 接口并扩展 抽象图 类使用哈希表。 HashMap的对象指的是 / * K代表键,V代表值* /类HashMap 第一个构造函数是默认构造函数,该构造函数以默认容量16和默认填充比0.75初始化HashMap的空对象。第二个构造函数使用m的值初始化哈希映射。第三个构造函数创建一个哈希映射,其初始容量对应于参数“ capacity”中提供的值。第四个构造函数使用参数中提供的容量和填充率初始化哈希图。现在让我们学习如何在哈希图中填充条目。 Hashmap hm =新的Hashmap(); hm.put(“ Ajay”,275); hm.put(“ Vijay”,250); hm.put(“ Jonny”,150); hm.put(“ Jordan”,200); System.out.ln(hm); / *输出* / {Vijay = 250,Jonny = 150,Ajay = 275,Jordan = 200} 在上面的代码中,您可以看到我创建了一个空的HashMap对象 嗯 具有默认的初始容量和默认的填充率。然后,我使用了将键映射到值的put(K,V)方法在哈希映射中插入了四个条目。您可以观察到,由于插入顺序不是固定的,条目没有按照您输入的顺序进行编辑。现在,考虑一个已经有条目的情况 Hashtable是扩展 字典 类,它是旧类,并且经过重新设计以实现 地图 接口。哈希表使用哈希表作为其数据结构。 Hashtable与HashMap相似,这里的Hashtable对象也指向条目的集合,其中每个条目都是一对 / * K指定键,V指定与键关联的值* /类Hashtable 在上面的代码中,第一个构造函数是一个默认构造函数,它创建一个Hashtable类的空对象,其默认大小为11,默认填充率为0.75。第二个构造函数创建一个哈希表,其大小与参数“ size”中提供的值相对应。第三个构造函数使用参数中提供的大小和填充率创建一个哈希表。第四个构造函数使用值m初始化哈希表。现在让我们学习如何插入 Hashtable ht = new Hashtable(); ht.put(new hashCode(2),275); ht.put(new hashCode(12),250); ht.put(new hashCode(16),150); ht.put(new hashCode(8),200); System.out.ln(ht); / *输出* / {12 = 250,16 = 150,2y = 275,8 = 200} 在上面的代码中,我创建了一个Hashtable空对象,并使用put()方法插入了四个条目。在put方法中,我调用了hashCode(),它计算并返回哈希码值,该哈希码值将用作入口对象的索引值。如您所见,我没有提到哈希表的大小,因此默认情况下为11。在这里,插入顺序也不保留,因此,当ed条目未按顺序出现时,就将其填充。 HashMap的性能更高,因为其对象是不同步的,并且多个线程可以同时对其进行操作,因此它比Hashtable更快。哈希表的定义
相似之处:
结论: