hashmap和hashtable之间的区别|

时间:2011-12-07 05:20:19

标签: java hashmap hashtable

  

可能重复:
  Differences between HashMap and Hashtable?

我前一天接受采访时,面试官问我在哪种情况下会有问题使用hashmap而不是哈希表? 含义给出例如hashtmap使用会导致问题的地方,但使用散列表将解决问题。

他告诉我运行代码的机器是单核!!

我给了一个例如

Time        Thread1            Thread 2
   t0    tb.put("a",1)       
   t1     tb.put("a",2)          int a = tb.get("a"); 

我告诉过,如果在t1,如果t1和t2同时执行,那么它将导致问题。 他说,因为它是一个单核cpu,它永远不会并行执行2个语句

有人可以澄清一下,什么时候会出现问题? 情况的任何一个例子?

编辑:我通过互换hashmap和hashtable发布了这个问题。我知道hashtable方法是同步的,hashmap的方法是不同的,我告诉他了

为了实现我实现的跟随。代码永远不会崩溃?我使用哈希表,但它仍然是A:)中的哈希映射

public class MyT extends Thread {

    HashMap<String,String > a = A.t;
    @Override
    public void run() {
        while (true) {
            a.put("a", "one");
            System.out.println(Thread.currentThread().getName());
        }
    }

    public static void main(String[] args) {
        MyT t1 = new MyT();
        t1.start();
        MyT t2 = new MyT();
        t2.start();
    }
}

6 个答案:

答案 0 :(得分:2)

我认为在问之前你必须先做以下事情:

  1. 在stackoverflow上搜索
  2. 在Google上搜索
  3. 通过以上两种方法获得以下结果:

    StackOverflow: Differences between HashMap and Hashtable?

    <强>谷歌

    what is the difference between HashMap and Hashtable

    Difference between HashMap and HashTable? Can we make hashmap synchronized?

    希望有所帮助:)

答案 1 :(得分:2)

与新的集合实现不同,Hashtable是同步的。这就是为什么我可以想象使用Hashmap会产生问题的情况,并且使用Hashtable会解决它。

它是单核的事实并不重要:如果Thread1在put调用的中间被抢占,Thread2将看到一个不一致的状态,并可能崩溃。

答案 2 :(得分:0)

嗯,仅仅因为它是单核心,并不意味着你不能拥有竞争条件。它可能(可能是?)意味着你不会遇到内存可见性问题,但是你当然可以在一个内核上运行多个线程,并且它们仍然可以被调度,以便你获得竞争条件。

答案 3 :(得分:0)

这是一个很好的链接,你可以参考:Differences between HashMap and Hashtable?

我想知道他们是否正如你所说的那样问你,因为他似乎想问哪个是线程安全的,哪个不是。

HashTable是线程安全的,但为什么他会问HashTable的问题?

答案 4 :(得分:0)

这里syncoronization是在这种情况下应该使用哈希表的主要原因。即使在这种情况下使用单个核心,您也无法保证tb.put("a",2)将在tb.get("a")被调用之前完成其执行。

这可能会导致输出不一致。如果使用HashTable,由于它是同步的,put在调用get之前完成。

有关详细信息,请参阅this主题

答案 5 :(得分:0)