关于java:hashmap和hashtable之间的区别|

difference between hashmap and hashtable|

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Differences between HashMap and Hashtable?

前几天我去面试了,面试官问我在什么情况下使用hashmap会有问题,而不是hashtable?这意味着给出一个使用hashtmap会导致问题的例子,但是使用hashtable可以解决问题。

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

我给了一个EG

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

我告诉过,如果T1和T2同时执行,那么它将导致问题。他说,由于它是一个单核CPU,它将永远不会并行执行两个语句。

有人能澄清一下,什么时候会有问题?有什么情况的例子吗?

编辑:我把这个问题通过hashmap和hashtable进行了链接,我知道hashtable方法是同步的,hashmap方法不是同步的,我已经告诉他了

据我所知,我只是简单地跟在后面。代码从来没有崩溃过?我不能使用hashtable,但它仍然是a:)中的hashmap。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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();
    }
}


与新的集合实现不同,哈希表是同步的。这就是为什么我可以想象使用hashmap会产生问题,使用hashtable可以解决问题。

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


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

  • 搜索StackOverflow
  • 在谷歌上搜索
  • 通过上述两种方法得到以下结果:

    stackoverflow:hashmap和hashtable之间的区别?

    谷歌

    hashmap和hashtable有什么区别

    hashmap和hashtable之间的区别?我们可以使hashmap同步吗?

    希望有帮助:)


    你可以在这里清楚地找到区别…

    http://javabynataraj.blogspot.com/2010/09/java-interview-questions-download.html


    这里,同步化是这个场景中应该使用哈希表的主要原因。在这种情况下,即使使用了一个内核,也不能保证tb.put("a",2)将在调用tb.get("a")之前完成它的执行。

    这可能导致输出不一致。如果使用hashtable,因为它是同步的,所以在调用get之前,put就完成了。

    有关详细信息,请参阅此线程


    这里有一个很好的链接,你可以参考它:hashmap和hashtable之间的区别?

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

    哈希表是线程安全的,但他为什么问哈希表的问题?


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