StringBuilder 初始化的重要性
public static void main(String[] args) { int length = 5000; Random random = new Random(); long startTime = 0; StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder1 = new StringBuilder(); StringBuilder stringBuilder2 = new StringBuilder(); String s1 = ""; String s2 = ""; String s3 = ""; for (int i = 0; i < length; i++) { stringBuilder.append(random.nextInt() * i); stringBuilder1.append(random.nextInt() * i - 1); stringBuilder2.append(random.nextInt() * i + 1); } s1 = stringBuilder.toString(); s2 = stringBuilder1.toString(); s3 = stringBuilder2.toString(); /**不指定初始值**/ stringBuilder1 = new StringBuilder(); startTime = System.currentTimeMillis(); for (int i = 0; i < length; i++) { stringBuilder1.append(s1).append(s2).append(s3); } System.out.println("stringBuilder不指定初始值:" + (System.currentTimeMillis() - startTime)); //释放掉容量 stringBuilder1 = null; /**指定初始值**/ stringBuilder2 = new StringBuilder(length * (s1.length() + s2.length() + s3.length())); startTime = System.currentTimeMillis(); for (int i = 0; i < length; i++) { stringBuilder2.append(s1).append(s2).append(s3); } System.out.println("stringBuilder指定初始值:" + (System.currentTimeMillis() - startTime)); }
截取一段字符串中,字符最长的
static String LongestWord(String sen) { int smallest = 0; String resulfString = ""; // 如果留数字: [^A-Za-z0-9 ] String[] parts = sen.replaceAll("[^a-zA-Z ]", "").split(" "); for (int i = 0; i < parts.length; i++) { if (parts[i].length() > smallest) { smallest = parts[i].length(); resulfString = parts[i]; } } return resulfString; }
不用加号实现两个数相加
static public int aplusb(int a, int b) { while (b != 0) { final int _a = a ^ b; final int _b = (a & b) << 1; a = _a; b = _b; } return a; }
递归调用
static int add(int i) { if (i == 0) { return i; } // 换成阶乘也是一样的 // 个人理解:实际就是一种循环的实现 // 实际最终会返回的是i+(i-1)+(i-1-1)+(i-1-1-1).... return i + add(i - 1); }
类加载顺序案例
public class SuperAndSub { public static void main(String[] args) { Sub s3 = new Sub(); } } class Super { static int a = getA(); static { System.out.println("加载Super的静态块"); } int b = getB(); { System.out.println("加载Super的普通块"); } Super() { System.out.println("加载Super的构造器"); } static int getA() { System.out.println("加载Super的静态变量"); return 1; } static int getB() { System.out.println("加载Super的实例变量"); return 2; } } class Sub extends Super { static int c = getC(); static { System.out.println("加载Sub的静态块"); } int d = getD(); { System.out.println("加载Sub的普通块"); } Sub() { System.out.println("加载Sub的构造器"); } static int getC() { System.out.println("加载Sub的静态变量"); return 1; } static int getD() { System.out.println("加载Sub的实例变量"); return 2; } }