黑马程序员技术交流社区

标题: HashMap ,HashTable区别 [打印本页]

作者: 胡述灵    时间: 2015-8-22 12:12
标题: HashMap ,HashTable区别
HashMap ,HashTable区别,什么叫线程安全?
作者: 史柯    时间: 2015-8-22 12:50
HashTable线程安全。
HashMap线程不安全。
HashMap是用来取代HashTable的。
线程安全会影响运行速度。
线程安全就是同步。
举个例子!
我银行卡里有1000块钱,线程同步的话,我取了1000块卡里就只有0元。
如果不同步,我卡里还是1000元。我可以在几个地方一起取钱,不就发财了。

作者: pengbeilin    时间: 2015-8-22 18:48
都学到集合了 不能连多线程都没学吧?
作者: JOKER0819    时间: 2015-8-23 23:31
HashTable线程安全。
作者: hejin67410    时间: 2015-9-20 22:07
谢谢分享
作者: xiaote0225    时间: 2015-9-21 11:58
Hashtable和HashMap类有三个重要的不同之处。第一个不同主要是历史原因。Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。
  
  也许最重要的不同是Hashtable的方法是同步的,而HashMap的方法不是。这就意味着,虽然你可以不用采取任何特殊的行为就可以在一个多线程的应用程序中用一个Hashtable,但你必须同样地为一个HashMap提供外同步。一个方便的方法就是利用Collections类的静态的synchronizedMap()方法,它创建一个线程安全的Map对象,并把它作为一个封装的对象来返回。这个对象的方法可以让你同步访问潜在的HashMap。这么做的结果就是当你不需要同步时,你不能切断Hashtable中的同步(比如在一个单线程的应用程序中),而且同步增加了很多处理费用。
  
  第三点不同是,只有HashMap可以让你将空值作为一个表的条目的key或value。HashMap中只有一条记录可以是一个空的key,但任意数量的条目可以是空的value。这就是说,如果在表中没有发现搜索键,或者如果发现了搜索键,但它是一个空的值,那么get()将返回null。如果有必要,用containKey()方法来区别这两种情况。
  
  一些资料建议,当需要同步时,用Hashtable,反之用HashMap。但是,因为在需要时,HashMap可以被同步,HashMap的功能比Hashtable的功能更多,而且它不是基于一个陈旧的类的,所以有人认为,在各种情况下,HashMap都优先于Hashtable。
  
  

作者: 水果牛牛    时间: 2015-9-21 12:29
学习了,谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2