论坛首页 Java企业应用论坛

10万个字符串相加会发生什么??

浏览 19339 次
精华帖 (0) :: 良好帖 (3) :: 新手帖 (7) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-01-30  
joachimz 写道
RednaxelaFX 的回复才是正途!
为什么要拼接起来后再拆分呢?如果不担心OOM,不能直接放入一个List,后面直接使用吗?


List 类型在 10W条记录的时候 性能会急剧下降 ~

不如用 Map ~
0 请登录后投票
   发表时间:2010-01-30  
没有线程安全问题的话用StringBuilder效率更高一点
0 请登录后投票
   发表时间:2010-01-30  
毫无疑问这是个设计问题,不论用什么,都不要给系统留下频繁大负载的机会。
0 请登录后投票
   发表时间:2010-01-30  
mengke 写道
楼主应该学习了解一下String的类型,这样的频繁拼接应该用StringBuffer



你应该学习认真看别人的帖子,LZ显然知道频繁拼接需要用什么,LZ应该是提醒大家这样的场景根本不需要字符串拼接。
0 请登录后投票
   发表时间:2010-01-30  
用StringBuilder等都没错。

不过,我觉的这种场景的数据量到一定程度,需要重构的主要是设计。

就像分页一样,内存里一次只处理一定数量,例如:200 个,采用stream或异步方式等方式逐步处理。总之,java弱的就是内存,不要做大内存操作。
0 请登录后投票
   发表时间:2010-01-31  
蜗牛创业网 写道
append太多了会溢出。
我的意思是 buffer append太多,在很久以前这件事在我面前发生了

能说说最后怎么解决的吗?
0 请登录后投票
   发表时间:2010-01-31  
JDK5之后,完全可以用“+”操作符来连接字符串,因为在JDK5之后,java会用StringBuilder来处理
0 请登录后投票
   发表时间: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存放大的数据量. 结果程序都瘫痪了.

小弟刚入门,不懂的事情就问.. 呵呵.. 希望不要拍砖.
0 请登录后投票
   发表时间:2010-01-31  
试试LinkedList,插入大量数据要比ArrayList来得好
0 请登录后投票
   发表时间:2010-01-31  
fish2007 写道
JDK5之后,完全可以用“+”操作符来连接字符串,因为在JDK5之后,java会用StringBuilder来处理


要说清楚开闭区间,Java6(包括)以后才是
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics