散列表和散列表之间的区别

可能重复:
HashMap和Hashtable的区别?

前几天我采访了面试官,问我在哪种情况下会有问题使用hashmap而不是hashtable? 含义给出一个例如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条语句

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

编辑:我通过interchaing hashmap和hashtable发布了问题。我知道hashtable方法是同步的,而hashmap的方法不是,我已经告诉他了

为了体验我实现以下。并且代码从未崩溃? 我dint使用散列表,但它仍然是一个哈希映射:)

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();
    }
}

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

  • 在stackoverflow上搜索
  • 在Google上搜索
  • 以上两种方法得到以下结果:

    StackOverflow:HashMap和Hashtable之间的区别?

    谷歌

    HashMap和Hashtable有什么区别

    HashMap和HashTable之间的区别? 我们可以让hashmap同步吗?

    希望帮助:)


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

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


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

    链接地址: http://www.djcxy.com/p/16349.html

    上一篇: difference between hashmap and hashtable

    下一篇: How is Hashtable different to Hashmap