HashMap/HashTable/String/StringBuffer/StringBuilde
2016-07-06 00:00
645 查看
自从Java 5.0发布以后,我们的比较列表上将多出一个对象了,这就是StringBuilder类。String类是不可变类,任何对String的改变都会引发 新的String对象的生成;而StringBuffer则是可变类,任何对它所指代的字符串的改变都不会产生新的对象,可变和不可变类这一对对象已经齐 全了,那么为什么还要引入新的StringBuilder类干吗?相信大家都有此疑问,我也如此。下面,我们就来看看引入该类的原因。
为什么会出现那么多比较String和StringBuffer的文章?
原因在于当改变字符串内容时,采用StringBuffer能获得更好的性能。既然是为了获得更好的性能,那么采用StringBuffer能够获得最好的性能吗?
答案是NO!
为什么?
如果你读过《Think in Java》,而且对里面描述HashTable和HashMap区别的那部分章节比较熟悉的话,你一定也明白了原因所在。对,就是支持线程同步保证线程安 全而导致性能下降的问题。HashTable是线程安全的,很多方法都是synchronized方法,而HashMap不是线程安全的,但其在单线程程 序中的性能比HashTable要高。StringBuffer和StringBuilder类的区别也在于此,新引入的StringBuilder类不 是线程安全的,但其在单线程中的性能比StringBuffer高
为什么会出现那么多比较String和StringBuffer的文章?
原因在于当改变字符串内容时,采用StringBuffer能获得更好的性能。既然是为了获得更好的性能,那么采用StringBuffer能够获得最好的性能吗?
答案是NO!
为什么?
如果你读过《Think in Java》,而且对里面描述HashTable和HashMap区别的那部分章节比较熟悉的话,你一定也明白了原因所在。对,就是支持线程同步保证线程安 全而导致性能下降的问题。HashTable是线程安全的,很多方法都是synchronized方法,而HashMap不是线程安全的,但其在单线程程 序中的性能比HashTable要高。StringBuffer和StringBuilder类的区别也在于此,新引入的StringBuilder类不 是线程安全的,但其在单线程中的性能比StringBuffer高
相关文章推荐
- Class类文件结构之ConstantValue属性
- StringBuffer 和 StringBuilder的区别
- UITableView
- 全文检索Lucene(二)--特定项搜索与queryParser搜索
- Vue.js
- hdu 5286 wyh2000 and sequence 分块
- 【MySQL】MySQL的Sequence
- 解决Tap手势和UITableView点击冲突
- QtQuick中解析富文本<初>
- IOS真机切换UI界面时,出现“Only run on the main thread” 的解决方法
- 在android studio中新建android gradle project的时候connect refused:connect或者卡在building project...或Refreshing
- 225. Implement Stack using Queues
- leetcode 232. Implement Queue using Stacks
- How do I iterate over a Scala List (or more generally, a sequence) using theforeach method or for loop?
- 232. Implement Queue using Stacks
- iOS开发 纯代码创建UICollectionView 听语音
- 【Android UI】ListView的使用和简单优化
- quick3.3模拟器的横屏
- Junit4出现java.lang.NoSuchMethodError: org.junit.runner.Request.classWithoutSuiteMethod
- Leetcode 51. N-Queens