遇到了这个很好的问题,这个问题类似但完全不同,因为它讨论了Java,它具有不同的哈希表实现,因为它具有同步访问器/ mutators HashMap和Hashtable之间的差异?
那么set和unordered_set的C++实现有什么不同呢?对于其他C++容器,这个问题可以扩展到map vs unordered_map等等.
这是我的初步评估
set:虽然标准并没有明确要求它实现为树,但时间复杂性约束要求查找/插入操作,这意味着它将始终实现为树.通常作为RB树(如GCC 4.8中所见),它是高度平衡的.由于它们是高度平衡的,因此它们具有可预测的find()时间复杂度
优点:紧凑(与其他DS相比)
Con:访问时间复杂度为O(lg n)
unordered_set:虽然标准并没有明确要求它实现为树,但时间复杂度约束要求查找/插入操作,这意味着它将始终实现为哈希表.
优点:
缺点:
注意:哈希表的O(1)来自假设没有冲突.即使负载系数为.5,每隔一次变量插入也会导致碰撞.可以观察到,散列表的负载因子与访问其中的元素所需的操作数成反比.我们减少了#operations,sparser hash-table.当存储的元素大小与指针相当时,开销非常重要.
编辑:由于大多数人都说问题中包含足够的答案,我正在将问题改为"我是否会错过地图/集合之间的任何区别,以便进行性能分析?"
据我所知,java.util.Hashtable同步java.util.Map接口中的每个方法,同时Collections.synchronizedMap(hash_map)返回一个包装器对象,其中包含将调用委托给实际的同步方法hash_map(如果我错了,请纠正我).
我有两个问题:
它与同步每个方法和包装类有什么区别?有哪些方案可以选择其中一种?
我们这样做会发生什么Collections.synchronizedMap(hash_table)?这是否等于简单地使用正常java.util.Hashtable?
我最近听说过Vector is a Legacy class,然后我在一个网站上看到了
旧版类用于在集合到来之前保存对象.
那么,为什么这些不被称为Deprecated类,为什么Legacy呢?
这不是一个关于之间的差异问题我知道Hashtable和HashMap.Hashtable对象不能接受null键或值条目的值,它是同步集合,并且它使用的内存略少于a HashMap.
我想知道使用a Hashtable而不是a 更合适的场景HashMap.
以下代码以相同的插入顺序给出了输出.我读了javadoc,他们甚至没有谈论插入顺序.有人可以帮助我获得正确的信息.
import java.util.*;
public class hash {
public static void main(String[] args) {
String str[] = { "japan",
"usa",
"japan",
"russia",
"usa",
"japan",
"japan",
"australia"};
int len = 8;
Hashtable ht = new Hashtable();
int i = 0;
while (i < len) {
String c = str[i];
System.out.println("c :" + c);
Integer intg = (Integer) ht.get(c);
if (intg == null)
ht.put(c, new Integer(1));
else
ht.put(c, new Integer(intg.intValue() + 1));
i++;
}
Enumeration k = ht.keys();
while (k.hasMoreElements()) {
String key …Run Code Online (Sandbox Code Playgroud) 为什么Hashtable不拿钥匙null?
为什么HashMap允许null键?
使这两个类的目的是什么?Key行为如此不同?
可能重复:
HashMap和Hashtable之间的差异?
我已经看到在不同代码中使用的哈希表和哈希映射,但它们看起来像是做同样的事情.它们之间有区别吗?我应该在我的代码中使用哪一个?
在过去的几分钟里,我一直在为自己辩论,而且我看到了是和否的原因.这源于查看Java HashMap与Hashtable的答案,并看到有几个人说Hashtable实际上更慢.
在我看来,如果在单个线程中运行,同步方法应该与其非同步方法完全没有区别,因为同步操作不应该阻塞任何内容.也就是说,我认为编译器会以不同的方式处理这两种情况,这就是人们说同步速度较慢的原因.
并不是说它无论如何都是决定性的,但是我对HashMap和Hashtable进行了一些简单的测试,并且看到了速度上的差别.
只是想知道.java.util.PropertiesVs 之间有什么区别java.util.HashMap<String, String>?哪个更好?
java ×9
collections ×5
hashmap ×4
hashtable ×4
algorithm ×1
c++ ×1
c++11 ×1
dictionary ×1
java-7 ×1
java-8 ×1
jsr ×1
properties ×1