Android中split,java.util.StringTokenizer和indexOf的使用以及各方法效率的对比

先上一个各个方法运行的效率对比图哈~


再来看看代码

package a.demo;
 
  import java.util.*;
 
  import android.app.Activity;
  import android.os.Bundle;
 
  public class S extends Activity {
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
         String str = "zkw";
         StringBuffer buffer = new StringBuffer();
 
         // 准备好字符串,总共有1000个“zkw”,以“,”相隔
         for (int i = 0; i < 1000; i++) {
             buffer.append(str).append(",");
         }
         str = buffer.toString();
 
         //String.split()
         splitTime(str);
 
         //List+indexOf()
         listTime(str);
         
         //String[]+indexof()
         arrayTime(str);
 
         //StringTokenizer
         tokenizer(str);
 
     }
     
     private void splitTime(String str) {
         long curTime = System.currentTimeMillis();
         String[] array = null;
         for (int m = 0; m < 100; m++) {
             array = str.split(",");
         }
         //printArray(array);
         System.out.println("String.split用时 : "
                 + (System.currentTimeMillis() - curTime));
     }
     
     private void listTime(String str) {
         long curTime = System.currentTimeMillis();
         String[] array = null;
         for (int n = 0; n < 100; n++) {
             ArrayList<String> arrayList = new ArrayList<String>();
             int index = 0, offset = 0;
             while ((index = str.indexOf(",", index + 1)) != -1) {
                 arrayList.add(str.substring(offset, index));
                 offset = index + 1;
             }
             array = arrayList.toArray(new String[0]);
         }
         //printArray(array);
         System.out.println("List+indexOf()用时 : "
                 + (System.currentTimeMillis() - curTime));
     }
     
     private void arrayTime(String str) {
         long curTime = System.currentTimeMillis();
         String[] array = new String[1001];
         for (int n = 0; n < 100; n++) {
             int index = 0, offset = 0;
             int i = 0;
             while ((index = str.indexOf(",", index + 1)) != -1) {
                 array[i] = str.substring(offset, index);
                 offset = index + 1;
                 i++;
             }
             array[i] = str.substring(offset);
         }
         //printArray(array);
         System.out.println("String[]+indexOf()用时 : "
                 + (System.currentTimeMillis() - curTime));
     }
     
     private void tokenizer(String str) {
         long curTime = System.currentTimeMillis();
         String[] array = null;
         for (int m = 0; m < 100; m++) {
             StringTokenizer token = new StringTokenizer(str, ",");
             array = new String[token.countTokens()];
             int i = 0;
             while (token.hasMoreTokens()) {
                 array[i++] = token.nextToken();
             }
         }
         //printArray(array);
         System.out.println("StringTokener用时 : "
                 + (System.currentTimeMillis() - curTime));
     }
     
     /*
      * 检验每个array数组是否相等
      * 仅仅是打印
      */
     private void printArray(String[] array) {
         for (int i = 0; i < array.length; i++) {
             System.out.print(array[i]);
         }
         System.out.println("");
     }
 }

中间两个是自己简单实现的算法,如果专门设计个算法,速度肯定更快!


PS:以前用Python的时候对split()印象挺好的,到了JAVA上发现很少有人用,今天测试才发现是有原因的。

PS2:这个测试仅仅在android平台上有效,在PC上还是split()比StringTokenizer稍微快点,仅仅是稍微,而且还是没有自己实现的算法快...



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值