⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 account.java

📁 Effective Java 中文版 侯捷译配套代码
💻 JAVA
字号:
// Compares the performance of repeated String concatenation and 
// repeated String buffer append. - Page 155

import java.util.*;

public class Account {
    private final static String LINE = "********************************************************************************";
    private final static int LINE_WIDTH = LINE.length();

    private final int numItems;

    Account(int numItems) {
        this.numItems = numItems;
    }

    public static void main(String args[]) {
        int numRuns = 3;
        int numReps = 1000;
        int numItems = 100;
        Account account = new Account(numItems);

        System.out.println("String");
        for (int i=0; i<numRuns; i++) {
            long start = System.currentTimeMillis();
            for (int k=0; k<numReps; k++)
                account.statement();
            long end = System.currentTimeMillis();
            System.out.println(end - start + " ms");
        }

        System.out.println("StringBuffer");
        for (int i=0; i<numRuns; i++) {
            long start = System.currentTimeMillis();
            for (int k=0; k<10*numReps; k++)
                account.statement2();
            long end = System.currentTimeMillis();
            System.out.println(((end - start)/10) + " ms");
        }

        System.out.println("StringBuffer without preallocation");
        for (int i=0; i<numRuns; i++) {
            long start = System.currentTimeMillis();
            for (int k=0; k<10*numReps; k++)
                account.statement3();
            long end = System.currentTimeMillis();
            System.out.println(((end - start)/10) + " ms");
        }
    }

    // Inappropriate use of string concatenation - Performs horribly!
    public String statement() {
        String s = "";
        for (int i = 0; i < numItems(); i++)
            s += lineForItem(i);  // String concatenation
        return s;
    }

    // Tuned StringBuffer version
    public String statement2() {
        StringBuffer s = new StringBuffer(numItems() * LINE_WIDTH);
        for (int i = 0; i < numItems(); i++)
            s.append(lineForItem(i));
        return s.toString();
    }

    // Detuned StringBuffer version
    public String statement3() {
        StringBuffer s = new StringBuffer();
        for (int i = 0; i < numItems(); i++)
            s.append(lineForItem(i));
        return s.toString();
    }

    private int numItems()            { return numItems; }

    private String lineForItem(int i) { return LINE; }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -