Java8 中有趣酷炫的小技巧
掃描二維碼
隨時隨地手機看文章
執(zhí)行注釋
大多數(shù)開發(fā)人員認為 注釋 永遠不會在程序中執(zhí)行,并用于幫助代碼理解。但是,它們卻 可以被執(zhí)行:
public class Main {
public static void main(String[] args) {
// \u000d System.out.println("wmyskxz is awesome!");
}
}
程序輸出:
wmyskxz is awesome!
說明
Java 允許使用 Unicode 字符而不進行編碼。這里的 Unicode 字符 \u000d
被 Java 編譯器解析為新行,因此可以理解為該 Unicode 字符后面出現(xiàn)的語句會在下一行被執(zhí)行。
雙括號初始化集合
在 Java 中,Set/ List/ Map
等集合對象沒有在生命期間初始化值的簡單方法 (Java 11 支持了該類操作)。開發(fā)人員要么將值顯式地傳送到集合內(nèi),要么為常量集合創(chuàng)建一個靜態(tài)塊。
使用雙括號初始化,可以在聲明過程中以更少的精力和時間初始化集合。例如:
Set<String> set = new HashSet<String>() {{
add("wmyskxz");
add("is");
add("awesome");
add("!");
} };
System.out.println(set);
程序輸出:
[awesome, !, wmyskxz, is]
“在
Java 11
中,你可以使用Set.of("wmyskxz", "is", "awesome", "!")
代替,這里僅僅討論Java 8
另外對于
ArrayList
集合類型還是有簡單初始化方法的:Arrays.asList()
獲取數(shù)組插入數(shù)字元素的下標
有一個很酷的技巧,可以找到可以在數(shù)組中插入所請求元素的位置:
int[] arr = new int[] { 1, 3, 4, 5, 6 };
// 2 has to be inserted
int pos = Arrays.binarySearch(arr, 2);
System.out.print("Element has to be inserted at: "
+ ~pos);
程序輸出:
Element has to be inserted at: 1
說明
Arrays.binarySearch()
是 JDK 自己實現(xiàn)的二分查找方法,局限就是目標數(shù)組必須是排序好的 (可以使用 Arrays.sort()
進行排序)。
判斷數(shù)字是偶數(shù)還是奇數(shù)
通常我們會使用 num % 2 == 0
(一定記住要使用 偶判斷 而不是奇判斷,原因是負數(shù)會出錯..) 來判斷數(shù)字是奇數(shù)還是偶數(shù)。下面的技巧盡管并不比上述方法好多少,但在考慮大數(shù)時,效率會高很多:
System.out.println((num & 1) == 0 ? "EVEN" : "ODD" );
示例:
int num = 2;
System.out.println((num & 1) == 0 ? "EVEN" : "ODD");
// 輸出 EVEN
num = -1;
System.out.println((num & 1) == 0 ? "EVEN" : "ODD");
// 輸出 ODD
快速乘或除 2
二進制中,乘以 2
表示將所有位向左移動,除以 2
表示向右移動。
n = n << 1; // Multiply n with 2
n = n >> 1; // Divide n by 2
判斷素數(shù)
Java 在 BigInteger
類中內(nèi)置了 isProbablePrime()
方法。如果此 BigInteger 可能是質(zhì)數(shù)(可以肯定),則返回 true
,如果它肯定是復(fù)合的,則返回 false
。
BigInteger.valueOf(1235).isProbablePrime(1)
More..
歡迎補充
參考資料
-
Interesting and Cool Tricks in Java - https://www.geeksforgeeks.org/interesting-and-cool-tricks-in-java/?ref=leftbar-rightbar -
Java tricks for competitive programming (for Java 8) - https://www.geeksforgeeks.org/java-tricks-competitive-programming-java-8/?ref=rp
特別推薦一個分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長按關(guān)注一下:
長按訂閱更多精彩▼
如有收獲,點個在看,誠摯感謝
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!