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

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

Android中split,java.util.StringTokenizer和indexOf的使用以及各方法效率的对比_第1张图片

再来看看代码

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稍微快点,仅仅是稍微,而且还是没有自己实现的算法快...



你可能感兴趣的:(Android中split,java.util.StringTokenizer和indexOf的使用以及各方法效率的对比)