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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 xiangzi2008006 于 2013-8-31 20:58 编辑

StringTokenizer和split得到的数组的区别?

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

2 个回复

正序浏览
黑马-文鸿利 发表于 2013-8-30 17:12
String str = "abc";  
StringBuffer buffer = new StringBuffer();  
  

嗯,谢谢你的回答
回复 使用道具 举报
String str = "abc";  
StringBuffer buffer = new StringBuffer();  
  
// prepare the string  
for (int i = 0; i < 10000; i ++){  
    buffer.append(str).append(",");  
}         
str = buffer.toString();  
  
// java.util.StringTokenizer  
long curTime = System.currentTimeMillis();  
for (int m = 0; m < 1000; m ++){  
    StringTokenizer token = new StringTokenizer(str, ",");  
    String[] array2 = new String[token.countTokens()];  
    int i = 0;  
    while (token.hasMoreTokens()){  
        array2[i++] = token.nextToken();  
    }  
}  
System.out.println("java.util.StringTokener : " + (System.currentTimeMillis() - curTime));  
  
// String.split()  
curTime = System.currentTimeMillis();  
for (int m = 0; m < 1000; m ++){  
    String[] array = str.split(",");  
}  
System.out.println("String.split : " + (System.currentTimeMillis() - curTime));  
  
curTime = System.currentTimeMillis();  
for (int n = 0; n < 1000; n ++){  
    Vector<String> vector= new Vector<String>();  
    int index = 0, offset = 0;  
    while ((index = str.indexOf(",", index + 1)) != -1){  
        vector.addElement(str.substring(offset, index));  
        offset = index + 1;  
    }  
    String[] array3 = vector.toArray(new String[0]);  
}  
System.out.println("Vector & indexOf : " + (System.currentTimeMillis() - curTime));  

输出----
java.util.StringTokener : 1407
String.split : 2546
Vector & indexOf : 1094


很显眼,使用StringTokenizer比使用Spring.split()提高接近一倍的性能。
而是用indexOf来逐步查找,性能还能进一步提高25%左右。很显然,越接近底层的方法性能越得到满足。
不过,这个只是在于对性能要求高的需求底下才有真正的意义。普通应用,String.split()足以

评分

参与人数 1技术分 +2 收起 理由
黄兴旺 + 2 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马