java集合类中非线程安全的集合能够用同步包装器使集合变成线程安全,好比:
HashMap --> Collections.synchronizedMap(new HashMap()),
那若是比较Collections.synchronizedMap(new HashMap())和HashTable的话,
哪一个的效率更高呢?相似的对应集合(HashMap-HashTable)还有哪些呢,每一个
的效率又如何呢? java
其实Java集合用到了不少的数据结构,用不一样的数据结构实现的Java集合类,固然在不一样的场合中使用有不一样的性能表现;下面简单说说你提到的这两个相似的java集合类在多线程下的效率问题(通常都是时间方面): 程序员
首先
Collections.synchronizedMap(new HashMap())和HashTable 都是同步集合,Collections.synchronizedMap采用的同步块实现,HashTable采用的是同步方法实现,在多线程环境下,通常认为是同步块好于同步方法;
其次,说到多线程,那线程安全是很重要的,这两个同步集合对于一些常见的简单操做:如put, remove, get等,线程安全对于单个操做来讲是没什么问题的,但对于一些复合操做来讲,如同时put和remove,迭代等,要保证线程安全,就必须在使用时 同步加锁 了,也就是确保像 put和remove 是一个原子操做,固然两种Java集合类都采用hash算法实现,运行效率不会有什么大的区别;前面说到它们都是同步集合,也就是说在多线程下并发操做时,无论是简单的操做仍是复合操做,为了线程安全,都是串行的操做,这样就会大大下降程序的效率,因此呢,并发集合ConcurrentHashMap出现了,这样即解决的并发问题,也解决了效率问题;
最后,建议你在多线程下,就用ConcurrentHashMap吧,用它来替换你说的那两个同步集合;
鱼和熊掌的问题了。
好比竞标系统,系统不会太大,并且并发量也不会过高。
这时候你就不须要去考虑空间管理等问题,速度和效率是第一位的。
而若是是银行项目,若是效率和安全二选其一,你是程序员,你怎么选? 算法
http://blog.csdn.net/ghevinn/article/details/37764791 安全