Algorithm
- leetcode 300: Longest Increasing Subsequence
- leetcode 44: Wildcard Matching
代碼地址: https://github.com/Lazy-Lion/Algorithm/blob/master/java/src/dynamicprogramming/WildcardMatching.java
Review
Strings, Literally
文章介紹了java 中String字面量以及String對象的一些知識點殖侵。
針對String字面量進行如下的代碼測試 (JDK8):
public class StringTest {
static String temp3 = "CD";
final static String temp4 = "CD";
public static void main(String[] args) {
String s1 = "ABCD";
String s2= "A" + "B" + "C" + "D";
String temp = "CD";
String s3 = "AB" + temp;
final String temp2 = "CD";
String s4 = "AB" + temp2;
String s5 = "AB" + temp3;
String s6 = "AB" + temp4;
String s7 = "AB" + get();
String s8 = "AB" + getF();
//tip: 編寫代碼System.out.println("s1 == s2 ? " + s1 == s2); 漏寫括號,
//導致輸出的是"(s1 == s2 ? " + s1) == s2" 的結(jié)果
System.out.println("s1 == s2 ? " + (s1 == s2));
System.out.println("s1 == s3 ? " + (s1 == s3));
System.out.println("s1 == s4 ? " + (s1 == s4));
System.out.println("s1 == s5 ? " + (s1 == s5));
System.out.println("s1 == s6 ? " + (s1 == s6));
System.out.println("s1 == s7 ? " + (s1 == s7));
System.out.println("s1 == s8 ? " + (s1 == s8));
}
public static String get(){
return "CD";
}
public final static String getF(){
return "CD";
}
}
對上述代碼進行反編譯:
public class StringTest {
static String temp3 = "CD";
static final String temp4 = "CD";
public static void main(String[] args) {
String s1 = "ABCD";
String s2 = "ABCD";
String temp = "CD";
String s3 = "AB" + temp;
String temp2 = "CD";
String s4 = "ABCD";
String s5 = "AB" + temp3;
String s6 = "ABCD";
String s7 = "AB" + get();
String s8 = "AB" + getF();
System.out.println("s1 == s2 ? " + (s1 == s2));
System.out.println("s1 == s3 ? " + (s1 == s3));
System.out.println("s1 == s4 ? " + (s1 == s4));
System.out.println("s1 == s5 ? " + (s1 == s5));
System.out.println("s1 == s6 ? " + (s1 == s6));
System.out.println("s1 == s7 ? " + (s1 == s7));
System.out.println("s1 == s8 ? " + (s1 == s8));
}
public static String get() {
return "CD";
}
public static final String getF() {
return "CD";
}
}
可以看到烙如,對于"+"連接,編譯期間存在部分優(yōu)化:
- "+" 直接連接多個字面量液茎,編譯期間優(yōu)化成一個字面量
- "+" 連接字面量和final變量票彪,編譯期間優(yōu)化成一個字面量
- "+" 連接字面量和非final變量援所,不優(yōu)化
- "+" 連接字面量和方法返回值,不優(yōu)化
Tip
工作中遇到為了去除重復數(shù)據(jù)而使用TreeSet的場景
TreeSet<K> set = new TreeSet<>();
java中的Set一般都是通過Map實現(xiàn)队贱,使用TreeSet的無參構(gòu)造方法實例化一個對象時色冀,實際上是通過TreeMap實現(xiàn)的,這時泛型對象K必須是實現(xiàn)了Comparable接口的對象柱嫌。TreeMap的put方法進行大小比較時锋恬,先判斷是否傳入外部比較器(Comparator),如果沒有則使用K類的Comparable接口實現(xiàn)编丘,而無參構(gòu)造器實例化時是沒有外部比較器的与学。
Share
Unicode的流言終結(jié)者和編碼大揭秘
關(guān)于Unicode字符集以及Unicode編碼之間的區(qū)別與聯(lián)系