1. StringBuilder使用reverse()方法
使用reverse()方法之后,StringBuidler的对象发生反转,然后返回这个反转后的值,而不是仅仅返回反转后的值!下面通过一个例子验证一下:
public class Main{ public static void main(String[] args) { StringBuilder sb = new StringBuilder("12345"); System.out.println("Original: " + sb.toString()); System.out.println("Reverse for one times: " + sb.reverse().toString()); System.out.println("Reverse for two times: " + sb.reverse().toString()); } }
输出:
Original: 12345 Reverse for one times: 54321 Reverse for two times: 12345
2. Java中Queue不同方法的区别
根据出错情况分为两类,一类是抛出异常,一类是返回false或者null
(图片来自廖雪峰的官方网站)
3. Math.ceil是java的向上取整函数
public class Main { public static void main(String[] args) { double num1 = 1.2; double num2 = 1.0; System.out.println(Math.ceil(num1)); System.out.println(Math.ceil(num2)); } }
输出:
2.0 1.0
4. List删除元素之后,元素的索引自动向前移动,这是和数组不同的地方。
import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Integer> num = new ArrayList<>(); num.add(1); num.add(2); num.add(3); System.out.println(num.get(0)); num.remove(0); System.out.println(num.get(0)); num.remove(0); System.out.println(num.get(0)); } }
输出:
1 2 3
5. String split是java的拆分函数,输入拆分的字符串,返回拆分后的数组。
public class Main { public static void main(String[] args) { String str = "Hello-World!-haha-aiyou-bucuoo-!"; String c = "-"; System.out.println("Result:"); String[] res = str.split(c); for(String s : res){ System.out.print(s + " "); } } }
输出:
Result:
Hello World! haha aiyou bucuoo !
6. 需要命令行执行的程序,可以考虑将其放到Linux上去执行。通过Xshell和Xftp(非商用版是免费的,不需要破解版),就可以快速轻量地实现环境的搭建。
下面是《算法》第四版Linux的环境搭建过程
(1)安装jdk
~> sudo add-apt-repository ppa:openjdk-r/ppa ~> sudo apt-get update ~> sudo apt-get install openjdk-11-jdk
(2)配置类库脚本
~> cd /usr/local /usr/local/> sudo curl -O "https://lift.cs.princeton.edu/java/linux/lift-cli.zip" /usr/local/> sudo unzip lift-cli.zip /usr/local/> sudo rm lift-cli.zip
测试一下命令 javac-algs4 和 java-algs4 (代替原有的 javac 和 java ),如果成功,那么环境就搭建完成了。
7. 归并排序的示例
//Main.java public class Main { public static void main(String[] args) { Comparable[] a = {'E','E','G','M','R','A','C','E','R','T'}; Merge.sort(a); for(Comparable c : a){ System.out.print(c + " "); } } }
//Merge.java public class Merge { private static Comparable[] aux; public static void sort(Comparable[] a){ aux = new Comparable[a.length]; sort(a, 0, a.length - 1); } private static void sort(Comparable[] a, int lo, int hi){ if(hi <= lo){ return; } int mid = lo + (hi - lo) / 2; sort(a, lo, mid); sort(a, mid + 1, hi); merge(a, lo, mid, hi); } public static void merge(Comparable[] a, int lo, int mid, int hi){ int i = lo, j = mid + 1; for(int k = lo; k <= hi; k++){ aux[k] = a[k]; } for(int k = lo; k <= hi; k++){ if(i > mid){ a[k] = aux[j++]; } else if(j > hi){ a[k] = aux[i++]; } else if(less(aux[j], aux[i]) < 0){ a[k] = aux[j++]; } else{ a[k] = aux[i++]; } } } public static int less(Comparable i, Comparable j){ return i.compareTo(j); } }
输出
A C E E E G M R R T
归并排序的时间复杂度:O(nlogn),空间复杂度:O(n)