锁定老帖子 主题:10万个字符串相加会发生什么??
精华帖 (0) :: 良好帖 (3) :: 新手帖 (7) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-01-30
joachimz 写道 RednaxelaFX 的回复才是正途!
为什么要拼接起来后再拆分呢?如果不担心OOM,不能直接放入一个List,后面直接使用吗? List 类型在 10W条记录的时候 性能会急剧下降 ~ 不如用 Map ~ |
|
返回顶楼 | |
发表时间:2010-01-30
没有线程安全问题的话用StringBuilder效率更高一点
|
|
返回顶楼 | |
发表时间:2010-01-30
毫无疑问这是个设计问题,不论用什么,都不要给系统留下频繁大负载的机会。
|
|
返回顶楼 | |
发表时间:2010-01-30
mengke 写道 楼主应该学习了解一下String的类型,这样的频繁拼接应该用StringBuffer
你应该学习认真看别人的帖子,LZ显然知道频繁拼接需要用什么,LZ应该是提醒大家这样的场景根本不需要字符串拼接。 |
|
返回顶楼 | |
发表时间:2010-01-30
用StringBuilder等都没错。
不过,我觉的这种场景的数据量到一定程度,需要重构的主要是设计。 就像分页一样,内存里一次只处理一定数量,例如:200 个,采用stream或异步方式等方式逐步处理。总之,java弱的就是内存,不要做大内存操作。 |
|
返回顶楼 | |
发表时间:2010-01-31
蜗牛创业网 写道 append太多了会溢出。
我的意思是 buffer append太多,在很久以前这件事在我面前发生了 能说说最后怎么解决的吗? |
|
返回顶楼 | |
发表时间:2010-01-31
JDK5之后,完全可以用“+”操作符来连接字符串,因为在JDK5之后,java会用StringBuilder来处理
|
|
返回顶楼 | |
发表时间:2010-01-31
RednaxelaFX 写道 mengke 写道 楼主应该学习了解一下String的类型,这样的频繁拼接应该用StringBuffer
楼主的描述似乎表明这段代码并不是楼主自己写的,而是楼主接手维护的。这种状况让人同情…… 而且原本那段代码要表达的意图大概是这样: List<String> mobilenumber = new ArrayList<String>(); while((fileLine = in.readLine()) != null) { line_num++; if(CTools.checkMobileValid(fileLine)!=0) { text_error = "error"; send_hash.put(String.valueOf(hash_num), line_num + "_" + "您输入的手机号码无效!"); hash_num++; } else { mobilenumber.add(fileLine); } } String[] mobilenumber_arry = mobilenumber.toArray(new String[mobilenumber.size()]); 楼主显然也知道这点……只是提醒一下大家说别像顶楼代码那样乱搞而已,吧? 用List的话会不会也会出现异常. 我记得有个项目出现过这种情况.. 就是List存放大的数据量. 结果程序都瘫痪了. 小弟刚入门,不懂的事情就问.. 呵呵.. 希望不要拍砖. |
|
返回顶楼 | |
发表时间:2010-01-31
试试LinkedList,插入大量数据要比ArrayList来得好
|
|
返回顶楼 | |
发表时间:2010-01-31
fish2007 写道 JDK5之后,完全可以用“+”操作符来连接字符串,因为在JDK5之后,java会用StringBuilder来处理
要说清楚开闭区间,Java6(包括)以后才是 |
|
返回顶楼 | |