要求:熟悉常用類庫(kù)的使用犀农,整理常用方法蛙埂。
一筑煮、objects類
示例方法:
-
equals()
public static boolean equals(Object a, Object b) /** 返回true如果參數(shù)相等油啤,彼此false其他评凝。 因此,如果這兩個(gè)參數(shù)是null 外邓, true返回撤蚊,如果只有一個(gè)參數(shù)為null , false返回损话。 否則侦啸,通過使用第一個(gè)參數(shù)的equals方法確定相等性。 參數(shù) a - 一個(gè)對(duì)象 b - 要與 a進(jìn)行比較以獲得相等性的對(duì)象 結(jié)果 true如果參數(shù)彼此相等丧枪,否則為 false */ //源碼 public static boolean equals(Object a, Object b) { return (a == b) || (a != null && a.equals(b)); }
-
toString()
1光涂、toString(Object o) /** 返回調(diào)用的結(jié)果 toString對(duì)于非 null參數(shù), "null"為 null的說法拧烦。 參數(shù) o - 一個(gè)物體 結(jié)果 調(diào)用的結(jié)果 toString對(duì)于非 null參數(shù)忘闻, "null"為 null的說法 */ //源碼 public static String toString(Object o) { return String.valueOf(o); } public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); } 2、toString(Object o, String nullDefault) /** 如果第一個(gè)參數(shù)不是 null 恋博,則返回在第一個(gè)參數(shù)上調(diào)用 toString的結(jié)果齐佳,否則返回第二個(gè)參數(shù)。 參數(shù) o - 一個(gè)物體 nullDefault - 如果第一個(gè)參數(shù)是 null 债沮,則返回的字符串 結(jié)果 如果它不是 null 炼吴,則在第一個(gè)參數(shù)上調(diào)用 toString ,否則調(diào)用第二個(gè)參數(shù) */ public static String toString(Object o, String nullDefault) { return (o != null) ? o.toString() : nullDefault; }
-
compare()
public static <T> int compare(T a, T b, Comparator<? super T> c) /**如果參數(shù)相同則返回0疫衩,否則返回c.compare(a, b) 缺厉。 因此,如果兩個(gè)參數(shù)都是null則返回0隧土。 請(qǐng)注意提针,如果其中一個(gè)參數(shù)為null , NullPointerException可能會(huì)或可能不會(huì)拋出null 曹傀,具體取決于訂購(gòu)策略(如果有)辐脖, Comparator選擇具有null值。 參數(shù)類型 T - 要比較的對(duì)象的類型 參數(shù) a - 一個(gè)物體 b - 要與 a進(jìn)行比較的對(duì)象 c - 比較前兩個(gè)參數(shù)的 Comparator 結(jié)果 如果參數(shù)相同 c.compare(a, b) 0皆愉,否則為 c.compare(a, b) 嗜价。 */ //源碼 public static <T> int compare(T a, T b, Comparator<? super T> c) { return (a == b) ? 0 : c.compare(a, b); }
二、Math類
方法:
-
abs()
//源碼幕庐,求參數(shù)的絕對(duì)值 public static int abs(int a) { return (a < 0) ? -a : a; }
-
min()
//源碼久锥,返回兩個(gè)參數(shù)中的較小值 public static int min(int a, int b) { return (a <= b) ? a : b; }
-
max()
//源碼,返回兩個(gè)參數(shù)中的較大值 public static int max(int a, int b) { return (a >= b) ? a : b; }
round() 四舍五入
floor() 返回小于等于參數(shù)的最大整數(shù)
-
ceil() 返回大于等于參數(shù)的最小整數(shù)
//源碼較為復(fù)雜异剥,展示使用過程 System.out.println(Math.floor(100.5)); System.out.println(Math.ceil(100.5)); System.out.println(Math.round(100.5)); System.out.println(Math.floor(-3.5)); System.out.println(Math.floor(-3.5)); System.out.println(Math.ceil(-3.5)); System.out.println(Math.round(-3.5)); /** 100.0 101.0 101 -4.0 -4.0 -3.0 -3 */
三瑟由、Arrays
方法:
-
binarySearch(int[] original, int key)
public static int binarySearch(int[] a, int key) /** 使用二進(jìn)制搜索算法在指定的int數(shù)組中搜索指定的值。 在進(jìn)行此調(diào)用之前冤寿,必須對(duì)數(shù)組進(jìn)行排序(如sort(int[])方法)歹苦。 如果未排序青伤,則結(jié)果未定義。 如果數(shù)組包含具有指定值的多個(gè)元素殴瘦,則無法保證找到哪個(gè)元素狠角。 參數(shù) a - 要搜索的數(shù)組 key - 要搜索的值 結(jié)果 搜索鍵的索引,如果它包含在數(shù)組中; 否則蚪腋, (-(insertion point) - 1) 丰歌。 插入點(diǎn)定義為鍵將插入到數(shù)組中的點(diǎn):第一個(gè)元素的索引大于鍵,或者如果數(shù)組中的所有元素都小于指定鍵屉凯, a.length 立帖。 請(qǐng)注意,當(dāng)且僅當(dāng)找到密鑰時(shí)神得,這才能保證返回值> = 0厘惦。 */ //源碼 public static int binarySearch(int[] a, int key) { return binarySearch0(a, 0, a.length, key); } private static int binarySearch0(int[] a, int fromIndex, int toIndex, int key) { int low = fromIndex; int high = toIndex - 1; while (low <= high) { int mid = (low + high) >>> 1; int midVal = a[mid]; if (midVal < key) low = mid + 1; else if (midVal > key) high = mid - 1; else return mid; // key found } return -(low + 1); // key not found. }
-
sort()
public static void sort(int[] a) /**將指定的數(shù)組按升序排序偷仿。 實(shí)施說明:排序算法是Vladimir Yaroslavskiy哩簿,Jon Bentley和Joshua Bloch的雙樞軸快速算法。 該算法在許多數(shù)據(jù)集上提供O(n log(n))性能酝静,導(dǎo)致其他快速排序降級(jí)為二次性能节榜,并且通常比傳統(tǒng)(單樞軸)Quicksort實(shí)現(xiàn)更快。 參數(shù) a - 要排序的數(shù)組 */
-
toString()
public static String toString(int[] a) /** 返回指定數(shù)組內(nèi)容的字符串表示形式别智。 字符串表示由數(shù)組元素的列表組成宗苍,用方括號(hào)括起來( "[]" )。 相鄰元素由字符", " (逗號(hào)后跟空格)分隔薄榛。 元素將轉(zhuǎn)換為字符串讳窟,如String.valueOf(int) 。 返回"null"如果a為null 敞恋。 參數(shù) a - 要返回其字符串表示形式的數(shù)組 結(jié)果 字符串表示形式 a */ //源碼 public static String toString(int[] a) { if (a == null) return "null"; int iMax = a.length - 1; if (iMax == -1) return "[]"; StringBuilder b = new StringBuilder(); b.append('['); for (int i = 0; ; i++) { b.append(a[i]); if (i == iMax) return b.append(']').toString(); b.append(", "); } }
-
copyOf()
public static int[] copyOf(int[] original, int newLength)//使用零復(fù)制指定的數(shù)組丽啡,截?cái)嗷蛱畛洌ㄈ缬斜匾允垢北揪哂兄付ǖ拈L(zhǎng)度硬猫。 對(duì)于在原始數(shù)組和副本中都有效的所有索引补箍,這兩個(gè)數(shù)組將包含相同的值。 對(duì)于在副本中有效但不在原件中有效的任何索引啸蜜,副本將包含0 坑雅。 當(dāng)且僅當(dāng)指定的長(zhǎng)度大于原始數(shù)組的長(zhǎng)度時(shí),這些索引才會(huì)存在衬横。 /**參數(shù) original - 要復(fù)制的數(shù)組 newLength - 要返回的副本的長(zhǎng)度 結(jié)果 原始數(shù)組的副本裹粤,用零截?cái)嗷蛱畛湟垣@得指定的長(zhǎng)度 異常 NegativeArraySizeException - 如果 newLength是負(fù)數(shù) NullPointerException - 如果 original為空 //源碼 public static int[] copyOf(int[] original, int newLength) { int[] copy = new int[newLength]; System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength)); return copy; }
應(yīng)用:
public static void main(String[] args) { int[] arr = {8,1,2,3,4,5,6,7}; System.out.println(arr.toString());//非Arrays靜態(tài)方法 Arrays.sort(arr); System.out.println(Arrays.toString(arr)); System.out.println(Arrays.binarySearch(arr,6)); arr = Arrays.copyOf(arr,10); System.out.println(arr.length); } /** [I@7c30a502 [1, 2, 3, 4, 5, 6, 7, 8] 5 10 */
四、BigDecimal
解決double類型數(shù)據(jù)運(yùn)算的精度丟失問題
方法:分別對(duì)應(yīng)加減乘除蜂林,構(gòu)造方法接收一個(gè)字符串參數(shù)表示小數(shù)
- add()
- substract()
- multiply()
- divide()
應(yīng)用:
BigDecimal b1 = new BigDecimal("0.1");
BigDecimal b2 = new BigDecimal("0.2");
System.out.println(b1.add(b2));
System.out.println(b1.multiply(b2));
System.out.println(b1.divide(b2));
System.out.println(b1.subtract(b2));
//獲取值
b1 = b1.add(b2);
double res = b1.doubleValue();//轉(zhuǎn)為double結(jié)果
System.out.println(res);
/**
0.3
0.02
0.5
-0.1
0.3
*/
五蛹尝、Date
可以表示毫秒后豫,并解釋為年月日小時(shí)等,由于不適于國(guó)際化突那,故國(guó)際化的工作使用Calendar類完成挫酿。解釋為年月日、格式化解析字符串的功能使用DateFormat類完成愕难,故Date真正使用的場(chǎng)景僅在于獲取毫秒值早龟,表示特定的時(shí)刻。
方法
-
getTime()
/** public long getTime() 返回自此 Date對(duì)象表示的1970年1月1日00:00:00 GMT以來的毫秒數(shù)猫缭。 結(jié)果 自1970年1月1日00:00:00 GMT以來的毫秒數(shù)葱弟。 */
-
構(gòu)造方法Date()
//獲取當(dāng)前的時(shí)間,返回毫秒值 public Date()分配一個(gè) Date對(duì)象并對(duì)其進(jìn)行初始化猜丹,使其表示分配的時(shí)間芝加,測(cè)量 Date到毫秒。
構(gòu)造方法Date(long date)
/**public Date(long date)分配 Date對(duì)象并將其初始化以表示自標(biāo)準(zhǔn)基準(zhǔn)時(shí)間(稱為“紀(jì)元”)以來的指定毫秒數(shù)射窒,即1970年1月1日00:00:00 GMT藏杖。 參數(shù) date - 格林威治標(biāo)準(zhǔn)時(shí)間1970年1月1日00:00:00之后的毫秒數(shù) */
-
setTime()
/** public void setTime(long time) 將此 Date對(duì)象設(shè)置為表示格林威治標(biāo)準(zhǔn)時(shí)間1970年1月1日00:00:00之后的 time毫秒的時(shí)間點(diǎn)。 參數(shù) time - 毫秒數(shù)脉顿。 */
應(yīng)用:
Date date = new Date(); System.out.println(date); long time = date.getTime() - (1*60*60*1000); Date date2 = new Date(time); System.out.println(date2); //Wed Oct 07 10:53:13 CST 2020 //Wed Oct 07 09:53:13 CST 2020
六蝌麸、DateFormat類
對(duì)Date進(jìn)行格式化工作
-
DateFormat
是日期/時(shí)間格式化子類的抽象類艾疟,它以與語言無關(guān)的方式格式化和分析日期或時(shí)間来吩。日期/時(shí)間格式化子類(例如[
SimpleDateFormat](SimpleDateFormat.html) )允許格式化(即,日期→文本)蔽莱,解析(文本“日期”)和規(guī)范化弟疆。日期表示為
Date`對(duì)象或自1970年1月1日00:00:00 GMT以來的毫秒數(shù)。DateFormat
提供了許多類方法盗冷,用于根據(jù)默認(rèn)或給定的區(qū)域設(shè)置和多種格式樣式獲取默認(rèn)日期/時(shí)間格式化程序怠苔。 格式化風(fēng)格包括FULL
,LONG
正塌,MEDIUM
和SHORT
嘀略。 在方法描述中提供了更多細(xì)節(jié)和使用這些樣式的示例。DateFormat
可幫助您格式化和解析任何區(qū)域設(shè)置的日期乓诽。 您的代碼可以完全獨(dú)立于幾個(gè)月帜羊,一周中的日期,甚至是日歷格式的區(qū)域設(shè)置約定:月球與太陽能鸠天。
DateFormat是一個(gè)抽象類讼育,不能直接使用,需要使用子類SimpleDateFormat。
應(yīng)用:
-
將Date對(duì)象轉(zhuǎn)化為指定的字符串
SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH:mm ss"); String text = format.format(new Date()); System.out.println(text);
-
將字符串轉(zhuǎn)為Date(獲得毫秒時(shí)間戳奶段,可以進(jìn)行運(yùn)算饥瓷,計(jì)算時(shí)間差,或換算小時(shí)痹籍、天數(shù)等)
Date date = format.parse("2020年12月12日 12:12 40"); System.out.println((new Date().getTime() - date.getTime())/1000/60/60/24); //-66
七呢铆、Calendar類
可以對(duì)Date對(duì)象轉(zhuǎn)換時(shí)區(qū),抽象類蹲缠,但是可以使用getInstance方法來返回子類對(duì)象棺克。
//常用方法 set、get线定、add getTime()
Calendar cl = Calendar.getInstance();//默認(rèn)獲得的是當(dāng)前日期
int year = cl.get(Calendar.YEAR);
System.out.println(year);
int month = cl.get(Calendar.MONTH);
System.out.println(month + 1);//日歷0-11
int day = cl.get(Calendar.DAY_OF_MONTH);
System.out.println(day);
//修改日期
cl.set(Calendar.MONTH,10);
System.out.println(cl.get(Calendar.MONTH) + 1);
//日期加減
cl.add(Calendar.YEAR,1);
cl.add(Calendar.MONTH,3);
cl.add(Calendar.MONTH,-3);
//getTime():獲取日歷時(shí)間表示的Date對(duì)象
System.out.println(cl.getTime());
//getActualAcrualMaxium():獲取參數(shù)字段的最大值
System.out.println(cl.getActualMaximum(Calendar.DAY_OF_WEEK));
System.out.println(cl.getActualMaximum(Calendar.DAY_OF_MONTH));
/**
2020
10
7
11
Sun Nov 07 12:20:27 CST 2021
7
30
*/
八娜谊、String類
- 類內(nèi)使用數(shù)組存放字符串中的各個(gè)字符,數(shù)組確定長(zhǎng)度之后無法改變斤讥,所以String是不可變類型纱皆。
- 由于String對(duì)象是不可變的,所以可以共享芭商,兩次創(chuàng)建相同的字符串派草,實(shí)際上僅在(字符串常量池)堆區(qū)分配一塊內(nèi)存,兩個(gè)變量指向同一個(gè)地址蓉坎。但是通過new方式創(chuàng)建的同內(nèi)容字符串澳眷,地址還是不一樣的胡嘿。區(qū)別=和new構(gòu)造的區(qū)別蛉艾。
- 字符串常量池之前在方法區(qū),之后JDK1.7之后衷敌,被拿到了堆區(qū)中勿侯,運(yùn)行時(shí)常量池還在方法區(qū),也就是永久代(不會(huì)被GC回收缴罗,只有關(guān)閉JVM才會(huì)被回收)助琐,永久代移到堆內(nèi)存中之后,自JDK1.8起面氓,方法區(qū)的實(shí)現(xiàn)改為元空間兵钮。永久代中存儲(chǔ)的都是加載一次的,所有定義方法的信息舌界,屬于共享區(qū)間掘譬,供多個(gè)線程共享(靜態(tài)變量、常量呻拌、類信息葱轩、運(yùn)行時(shí)常量池)。堆內(nèi)存中也分為新生代、老年代靴拱、永久代垃喊。
- String有final修飾,不能被繼承袜炕,方法也不能被重寫本谜。
- 大量字符串拼接,多次拼接的場(chǎng)景下偎窘,不要使用加號(hào)耕突,會(huì)導(dǎo)致在內(nèi)存中出現(xiàn)大量垃圾,由于處于永久代中评架,不會(huì)被GC回收眷茁,要使用StringBuffer類和StringBuilder中提供的append方法進(jìn)行尾部拼接。StringBuffer類是線程安全的和StringBuilder是線程不安全的纵诞。