最近自己寫程式的時候,想提高程式的效能。
一個基本的想法是:減少對象的建立。由於我的程式中要大量使用整數操作,包括 Integer.toString() 、Integer.toHexString() 等等。理論上,每次調用這些函數的時候都會解析整數,並產生字串,所以我自己寫了個類來緩衝結果,第二次調用的時候就不用再計算了。
以下代碼發布在公用領域(Public Domain)下,你可以自由地使用它們。
/**<br /> * Integer utils, cached many results of toString/toHexString to get better performance<p><br /> * Java 1.4 compatible<br /> *<br /> * @author henix[http://blog.csdn.net/shell_picker]<br /> */<br />public class IntegerUtils {</p><p> static final int MAX_CACHED = 2048;</p><p> private static Integer[] cache = new Integer[MAX_CACHED];<br /> private static String[] cachedStrings = new String[MAX_CACHED];<br /> private static String[] cachedHexStrings = new String[MAX_CACHED];</p><p> /**<br /> * Implement the same logic as Integer.valueOf(int) in Java 1.5.<br /> *<br /> * @param i<br /> * @return<br /> */<br /> public static Integer getInteger(int i) {<br /> if (i >= 0 && i < MAX_CACHED) {<br /> synchronized (cache) {<br /> if (cache[i] == null) {<br /> cache[i] = new Integer(i);<br /> }<br /> }<br /> return cache[i];<br /> } else {<br /> return new Integer(i);<br /> }<br /> }</p><p> public static String toString(int i) {<br /> if (i >= 0 && i < MAX_CACHED) {<br /> synchronized (cachedStrings) {<br /> if (cachedStrings[i] == null) {<br /> cachedStrings[i] = Integer.toString(i);<br /> }<br /> }<br /> return cachedStrings[i];<br /> } else {<br /> return Integer.toString(i);<br /> }<br /> }</p><p> public static String toHexString(int i) {<br /> if (i >= 0 && i < MAX_CACHED) {<br /> synchronized (cachedHexStrings) {<br /> if (cachedHexStrings[i] == null) {<br /> cachedHexStrings[i] = Integer.toHexString(i);<br /> }<br /> }<br /> return cachedHexStrings[i];<br /> } else {<br /> return Integer.toHexString(i);<br /> }<br /> }</p><p> /**<br /> * parseInt that never throws exceptions<br /> *<br /> * @param str<br /> * @return<br /> */<br /> public static int parseInt(String str) {<br /> try {<br /> return Integer.parseInt(str);<br /> } catch (Exception e) {<br /> return 0;<br /> }<br /> }</p><p> public static int parseInt(String str, int radix) {<br /> try {<br /> return Integer.parseInt(str, radix);<br /> } catch (Exception e) {<br /> return 0;<br /> }<br /> }<br />}