相关疑难解决方法(0)

C++中set和unordered_set有什么区别?

遇到了这个很好的问题,这个问题类似但完全不同,因为它讨论了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:虽然标准并没有明确要求它实现为树,但时间复杂度约束要求查找/插入操作,这意味着它将始终实现为哈希表.

优点:

  1. 更快(承诺摊销O(1)进行搜索)
  2. 与tree-DS相比,易于将基本原语转换为线程安全的

缺点:

  1. 查找不保证是O(1)最坏的情况是O(n)
  2. 不像树一样紧凑.(出于实际目的,载荷因子永远不会是1)

注意:哈希表的O(1)来自假设没有冲突.即使负载系数为.5,每隔一次变量插入也会导致碰撞.可以观察到,散列表的负载因子与访问其中的元素所需的操作数成反比.我们减少了#operations,sparser hash-table.当存储的元素大小与指针相当时,开销非常重要.

编辑:由于大多数人都说问题中包含足够的答案,我正在将问题改为"我是否会错过地图/集合之间的任何区别,以便进行性能分析?"

c++ algorithm data-structures c++11

55
推荐指数
2
解决办法
3万
查看次数

Hashtable和Collections.synchronizedMap(HashMap)之间的区别

据我所知,java.util.Hashtable同步java.util.Map接口中的每个方法,同时Collections.synchronizedMap(hash_map)返回一个包装器对象,其中包含将调用委托给实际的同步方法hash_map(如果我错了,请纠正我).

我有两个问题:

  1. 它与同步每个方法和包装类有什么区别?有哪些方案可以选择其中一种?

  2. 我们这样做会发生什么Collections.synchronizedMap(hash_table)?这是否等于简单地使用正常java.util.Hashtable

java collections synchronization hashtable hashmap

46
推荐指数
2
解决办法
2万
查看次数

Java中的遗留类是什么?

我最近听说过Vector is a Legacy class,然后我在一个网站上看到了

旧版类用于在集合到来之前保存对象.

那么,为什么这些不被称为Deprecated类,为什么Legacy呢?

java collections

25
推荐指数
2
解决办法
4万
查看次数

我应该何时使用Hashtable与HashMap

这不是一个关于之间的差异问题HashtableHashMap.我知道Hashtable对象不能接受null键或值条目的值,它是同步集合,并且它使用的内存略少于a HashMap.

我想知道使用a Hashtable而不是a 更合适的场景HashMap.

java collections hashtable hashmap

24
推荐指数
3
解决办法
2万
查看次数

Project Coin的集合增强功能将在JDK8中进行吗?

最初Coin项目增强了对集合的支持,例如list[3]代替list.get(3)map["hello"] = 27代替的map.put("hello", 27),但他们不是在JDK7.他们会在jdk8吗?对于是或否,我找不到确定的答案.

java jsr java-7 java-8

21
推荐指数
1
解决办法
4276
查看次数

HashTable是否维护插入顺序?

以下代码以相同的插入顺序给出了输出.我读了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)

java collections dictionary hashtable

20
推荐指数
3
解决办法
3万
查看次数

为什么Hashtable不带空键?

为什么Hashtable不拿钥匙null

为什么HashMap允许null键?

使这两个类的目的是什么?Key行为如此不同?

java collections

14
推荐指数
3
解决办法
2万
查看次数

Hashtable如何与Hashmap不同

可能重复:
HashMap和Hashtable之间的差异?

我已经看到在不同代码中使用的哈希表和哈希映射,但它们看起来像是做同样的事情.它们之间有区别吗?我应该在我的代码中使用哪一个?

java hashtable hashmap

13
推荐指数
1
解决办法
1238
查看次数

单线程应用程序中的同步方法是否更慢?

在过去的几分钟里,我一直在为自己辩论,而且我看到了是和否的原因.这源于查看Java HashMap与Hashtable的答案,并看到有几个人说Hashtable实际上更慢.

在我看来,如果在单个线程中运行,同步方法应该与其非同步方法完全没有区别,因为同步操作不应该阻塞任何内容.也就是说,我认为编译器会以不同的方式处理这两种情况,这就是人们说同步速度较慢的原因.

并不是说它无论如何都是决定性的,但是我对HashMap和Hashtable进行了一些简单的测试,并且看到了速度上的差别.

java multithreading synchronization

11
推荐指数
2
解决办法
5177
查看次数

java.util.Properties Vs java.util.Map <String,String>

只是想知道.java.util.PropertiesVs 之间有什么区别java.util.HashMap<String, String>?哪个更好?

java properties hashmap

11
推荐指数
3
解决办法
2万
查看次数