A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡述灵 中级黑马   /  2015-8-22 12:12  /  573 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

HashMap ,HashTable区别,什么叫线程安全?

6 个回复

倒序浏览
HashTable线程安全。
HashMap线程不安全。
HashMap是用来取代HashTable的。
线程安全会影响运行速度。
线程安全就是同步。
举个例子!
我银行卡里有1000块钱,线程同步的话,我取了1000块卡里就只有0元。
如果不同步,我卡里还是1000元。我可以在几个地方一起取钱,不就发财了。

评分

参与人数 1黑马币 +5 收起 理由
胡述灵 + 5

查看全部评分

回复 使用道具 举报
都学到集合了 不能连多线程都没学吧?
回复 使用道具 举报
HashTable线程安全。
回复 使用道具 举报
谢谢分享
回复 使用道具 举报
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。
  
  
回复 使用道具 举报
学习了,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马