您当前的位置: 首页 >  Java

星拱北辰

暂无认证

  • 0浏览

    0关注

    1205博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Java】split()和java.util.StringTokenizer分割字符串的性能比较

星拱北辰 发布时间:2020-03-05 21:48:21 ,浏览量:0

原始版本
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

public class StringGenerator {
    public static void main(String[] args) {
        try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("text.text"))) {
            StringBuilder str = new StringBuilder();
            str.append("afiaongaoncanivnrfbnavoiadnvonvoron#".repeat(1000));
            str.append("aovnodnvds");
            writer.write(str.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

文件写进去了: 在这里插入图片描述

看看能不能读出来: 在这里插入图片描述

读的出来,那就正式测试吧:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;

public class SplitTest {
    public static void main(String[] args) {
        String str = "";
        try (BufferedReader reader = new BufferedReader(new FileReader("text.text"))) {
            str = reader.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
        long time0 = System.currentTimeMillis();
        StringTokenizer st = new StringTokenizer(str, "#");
        while (st.hasMoreTokens()) {
            st.nextToken();
        }
        long time1 = System.currentTimeMillis();
        String[] array = str.split("#");
        for (String s : array) {}
        long time2 = System.currentTimeMillis();
        System.out.println("StringTokenizer的运行时间是:" + (time1-time0));
        System.out.println("split()的运行时间是:" + (time2-time1));
    }
}

运行结果:

StringTokenizer的运行时间是:9
split()的运行时间是:0
文本内容×10
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

public class StringGenerator {
    public static void main(String[] args) {
        try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("text.text"))) {
            StringBuilder str = new StringBuilder();
            str.append("afiaongaoncanivnrfbnavoiadnvonvoron#".repeat(10000));
            str.append("aovnodnvds");
            writer.write(str.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

运行结果:

StringTokenizer的运行时间是:10
split()的运行时间是:0
文本内容×100
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

public class StringGenerator {
    public static void main(String[] args) {
        try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("text.text"))) {
            StringBuilder str = new StringBuilder();
            str.append("afiaongaoncanivnrfbnavoiadnvonvoron#".repeat(100000));
            str.append("aovnodnvds");
            writer.write(str.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

看看这3.6MB的文件吧…… 在这里插入图片描述 运行结果:

StringTokenizer的运行时间是:20
split()的运行时间是:10
文本内容×1000
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

public class StringGenerator {
    public static void main(String[] args) {
        try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("text.text"))) {
            StringBuilder str = new StringBuilder();
            str.append("afiaongaoncanivnrfbnavoiadnvonvoron#".repeat(1000000));
            str.append("aovnodnvds");
            writer.write(str.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

惨绝人寰的36M: 在这里插入图片描述 运行结果:

StringTokenizer的运行时间是:90
split()的运行时间是:140
文本内容×10000

这个时候虚拟机就有点顶不住,我忘了是1W倍还是10W倍数据,反正基本在GB级别的时候,虚拟机就崩了…… 在这里插入图片描述

试着调了虚拟机,也没啥用,就试着不在一次写入,而是改成分批次写入,每次都是追加模式……

import java.io.FileWriter;
import java.io.IOException;

public class StringGenerator {
    public static void main(String[] args) {
        try (FileWriter writer = new FileWriter("text.text", true)) {
            StringBuilder str = new StringBuilder();
            str.append("afiaongaoncanivnrfbnavoiadnvonvoron#".repeat(1000000));
            for (int i = 0; i             
关注
打赏
1660750074
查看更多评论
0.0776s