Java.util庫 + Java.lang庫基礎知識
文章目錄
Arrays類
java.util.Arrays 類能方便地運算元組,它提供的所有方法都是靜態的。提供功能如下:
- asList()方法。將陣列轉換為一個定長的list。這是一個連線了array 和 collection的API。相對應的還有Collection.toArray()。
public static <T> List<T> asList(T... a)
//eg
List<String> s = Arrays.asList("Larry", "Moe", "Curly");
List<Integer> value = Arrays.asList(nums);
- binarySearch() 方法。對排序的陣列進行二分查詢。用二分查詢演算法在給定陣列中搜索給定值的物件(Byte,Int,double等)。陣列在呼叫前必須排序好的。如果查詢值包含在陣列中,則返回搜尋鍵的索引;否則返回 (-(應該插入點) - 1)。
fromIndex為開始搜尋的第一個下標,包括它;toIndex為結束搜尋的下標,不包括。
public static int binarySearch(Object[] a, Object key)
//eg
int index = Arrays.binarySearch(nums, n);
public static int binarySearch(Object[] a, int fromIndex, int toIndex, Object key)
- copyOf() 方法。複製陣列為一個新的長度為newLength的陣列。可能會刪掉超出範圍的元素,如果不足則補充0或者null。
public static int[] copyOf(int[] original,
int newLength)
//eg
int[] index = Arrays.copyOf(nums, n);
- copyOfRange() 方法。複製指定範圍內的陣列元素為一個新的陣列,新陣列的內容為from 到 to的元素。
from為開始搜尋的第一個下標,包括它;to為結束搜尋的下標,不包括。
public static int[] copyOfRange(int[] original,
int from, int to)
//eg
int[] index = Arrays.copyOf(nums, n);
- equals() 方法。如果兩個同樣型別陣列彼此相等,則返回 true。如果兩個陣列包含相同數量的元素,並且兩個陣列中的所有相應元素對都是相等的,則認為這兩個陣列是相等的。換句話說,如果兩個陣列以相同順序包含相同的元素,則兩個陣列是相等的。同樣的方法適用於所有的其他基本資料型別(Byte,short,Int等)。
public static boolean equals(long[] a, long[] a2)
//eg
if (Arrays.equals(nums1, nums2){
//do something
}
- fill() 方法。將指定的值分配給指定型別陣列指定範圍中的每個元素。同樣的方法適用於所有的其他基本資料型別(Byte,short,Int等)。
也可以對指定範圍的元素進行賦值。
fromIndex為開始賦值的第一個下標,包括它;toIndex為結束賦值的下標,不包括。
public static void fill(int[] a, int val)
//eg
Arrays.fill(nums, 1);
public static void fill(int[] a, int fromIndex, int toIndex, int val)
//eg
Arrays.fill(nums, 1, 3, 233);
- hashCode() 方法。根據陣列內容,返回它的hash code。
public static int hashCode(Object[] a)
//eg
int hash = Arrays.hashCode(nums);
- sort() 方法。對指定物件陣列根據其元素的自然順序進行升序排列。同樣的方法適用於所有的其他基本資料型別(Byte,short,Int等)。
可以通過指定fromIndex,toIntex指定排序的範圍,同樣的toIndex是不包括的。
也可以自己定義Comparator來實現降序排序或其他特殊的排序方法(比如陣列中存放TreeNode)。所有陣列中的元素都要根據Comparator的定義進行排序。
public static void sort(Object[] a)
//eg
Arrays.sort(nums);
public static void sort(Object[] a, int fromIndex, int toIndex)
//eg
Arrays.sort(nums, 2, 233);
public static void sort(Object[] a, Comparator<? super T> c)
//eg
int[] nums = new int[]{5, 4, 2, 1, 3};
Arrays.sort(nums, new Comparator<Integer>() {
public int compare(Integer o1, Integer o2){
return o2.compareTo(o1);
}
});
- toString() 方法。將基本陣列型別的陣列轉換為包含了陣列內容的String形式。
public static String toString(Object[] a)
//eg
String s = Arrays.toString(nums);
Character類
來自於java.lang.Character。Character 類用於對單個字元進行操作。Character 類在物件中包裝一個基本型別 char 的值。
char ch = 'a';
// Unicode 字元表示形式
char uniChar = '\u039A';
// 字元陣列
char[] charArray ={ 'a', 'b', 'c', 'd', 'e' };
實際開發過程中,我們經常會遇到需要使用物件,而不是內建資料型別的情況。為了解決這個問題,Java語言為內建資料型別char提供了包裝類Character類。
實際上Character類提供了大量的靜態變量表示Unicode下的特殊字元以及很多方法,不再贅述。
Character類提供了一系列方法來操縱字元。你可以使用Character的構造方法建立一個Character類物件,實現對char型別引數的操作。
- isLetter()方法。判斷一個字元是不是字母。
public static boolean isLetter(char ch)
//eg
if (Character.isLetter('a')){
//do something
}
- isDigit()方法。判斷一個字元是不是數字。
public static boolean isDigit(char ch)
//eg
if (Character.isDigit('2')){
//do something
}
- isWhitespace()方法。判斷一個字元是不是空白字元。
public static boolean isWhitespace(char ch)
//eg
if (Character.isWhitespace(' ')){
//do something
}
- isUpperCase()方法。判斷一個字元是不是大寫字母。
public static boolean isUpperCase(char ch)
//eg
if (Character.isUpperCase('G')){
//do something
}
- isLowerCase()方法。有大寫就有小寫
public static boolean isLowerCase(char ch)
//eg
if (Character.isLowerCase('b')){
//do something
}
- toUpperCase()方法。將字元轉為大寫格式。
public static char toUpperCase(char ch)
//eg
char upper = Character.toUpperCase('a');
- toLowerCase()方法。將字元轉為小寫格式。
public static char toLowerCase(char ch)
//eg
char lower = Character.toLowerCase('A');
- toString()方法。返回字元的字串形式,字串的長度僅為1。也可直接對char使用。
public static String toString(char ch)
public String toString(char ch)
//eg
String s = Character.toString('2');
char ch = 'a';
s = ch.toString()
一些其他有用的方法:
- compare()方法。數值上比較兩個char。如果x == y,返回0; x < y,返回負數; x > y,返回正數。返回值等同於使用compareTo()。
public static int compare(char x, char y)
//eg
int diff = Character.compare('2', 'd');
//It is indentical to
int diff = Character.valueOf(x).compareTo(Character.valueOf(y));
- compareTo()方法。依然是比較,若比較元素為x,被比較元素為y。如果x == y,返回0; x < y,返回負數; x > y,返回正數。與compare()類似。
public int compareTo(Character anotherCharacter)
//eg
char x = 'e', y = 'b';
int diff = x.compareTo(y);
- valueOf()方法。返回一個Character物件代表了傳入的char。
public static Character valueOf(char c)
//eg
Character c = Character.valueOf(ch);
Collection介面
源自於java.util。Java 集合框架主要包括兩種型別的容器,一種是集合(Collection),儲存一個元素集合,另一種是圖(Map),儲存鍵/值對對映。Collection 介面又有 3 種子型別,List、Set 和 Queue,再下面是一些抽象類,最後是具體實現類,常用的有 ArrayList、LinkedList、Vector、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。儘管 Map 不是集合,但是它們完全整合在集合中。
集合類詳解
- add()方法。增加一個元素。(optional)
public boolean add(E e)
- addAll()方法。將一個Collection中的元素加入另一個集合中。(optional)
public boolean addAll(Collection<? extends E> c )
- clear()方法。刪除Collection中的所有元素。(optional)
public void clear(E e)
- contains()方法。判斷collection 是否包含某個元素。
public boolean contains(Object o)
- containsAll()方法。判斷collection 是否包含某collection 中所有元素。
public boolean containsAll(Collection<? extends E> c )
- equals()方法。判斷集合是否與這個物件相同。
public boolean equals(Object o)
- hashCode()方法。返回collection的hash code
public int hashCode()
- isEmpty()方法。返回collection是否為空。
public boolean isEmpty()
- remove()方法。刪除collection中的一個元素。(optional)
public boolean remove(Object o)
- removeAll()方法。刪除collection中的所有傳入的collection的元素。(optional)
public int removeAll(Collection<? extends E> c )
- size()方法。返回collection大小
public int size()
- toArray()方法。將collection轉為array
public Object[] toArray()
Comparator
源自於java.util。Comparator 是比較器介面。我們若需要控制某個類的次序,而該類本身不支援排序(即沒有實現Comparable介面);那麼,我們可以建立一個“該類的比較器”來進行排序。這個“比較器”只需要實現Comparator介面即可。
也就是說,我們可以通過“實現Comparator類來新建一個比較器”,然後通過該比較器對類進行排序。
Comparator 藉口包括兩個函式:
package java.util;
public interface Comparator<T> {
int compare(T o1, T o2);
boolean equals(Object obj);
}
-
若一個類要實現Comparator介面:它一定要實現
compare(T o1, T o2
) 函式,但可以不實現equals(Object obj)
函式。
為什麼可以不實現equals(Object obj)
函式呢? 因為任何類,預設都是已經實現了equals(Object obj)
的。 Java中的一切類都是繼承於java.lang.Object
,在Object.java
中實現了equals(Object obj)
函式;所以,其它所有的類也相當於都實現了該函式。 -
int compare(T o1, T o2)
是“比較o1和o2的大小”。返回“負數”,意味著“o1比o2小”;返回“零”,意味著“o1等於o2”;返回“正數”,意味著“o1大於o2”。
排序永遠是為了把小的排在前面,例如當返回負數的時候,表明第一個數應該排在第二個數的前面。
關於如何記憶返回值。我們認為o1
是處在前面的元素o2
是後面的元素。返回“正數”可以理解為true,我們想要調整順序,將o2
提前;返回“負數”理解為false,不想調整順序。return o2 - o1;
就可以實現降序排序了。
Integer 類
來自java.lang庫,是基本資料型別int的包裝類。int與integer的區別從大的方面來說就是基本資料型別與其包裝類的區別。int 是面向過程留下的痕跡,不過是對java的有益補充。Integer 是一個類,是int的擴充套件,定義了很多的轉換方法,還提供了處理 int 型別時非常有用的其他一些常量和方法
類似的還有:float Float;double Double;string String等。
-
int 是基本型別,直接存數值,而Integer是物件,用一個引用指向這個物件。
-
Java 中的資料型別分為基本資料型別和複雜資料型別int 是前者而Integer 是後者(也就是一個類);因此在類進行初始化時int類的變數初始為0.而Integer的變數則初始化為null.
初始化時:
int i = 1;
Integer i = new Integer(1);
Integer的靜態變數有:
3. MAX_VALUE。是一個代表了
的常量
public static final int MAX_VALUE
//eg
int res = Integer.MAX_VALUE;
- MIN_VALUE。是一個代表了 的常量
public static final int MIN_VALUE
//eg
int res = Integer.MIN_VALUE;
Integer提供的方法有:
5. Constructor()方法。建立一個新的Intger物件
public Integer(int);
//eg
Integer in = new Integer(1);
- bigCount()方法。返回二進位制表示的int中1位的個數,又被稱為population count
public static int bitCount(int i)
//eg
int n = Integer.bitCount(i);
- compare()方法。比較兩個int的大小,如果x == y,返回0; x < y,返回負數; x > y,返回正數。返回值等同於使用compareTo()。
public static int compare(int x, int y)
//eg
int n = Integer.compare(x, y);
//is identival to
Integer.valueOf(x).compareTo(Integer.valueOf(y))
- compareTo()方法。比較int與被比較數的大小。
public int compareTo(Integer anotherInteger)
//eg
Integer.valueOf(x).compareTo(Integer.valueOf(y));
- doubleValue()方法。將int轉位double
public double doubleValue()
//eg
double d = Integer.doubleValue(x);
- floatValue()方法。將int轉位float
public float floatValue()
//eg
double d = Integer.floatValue(x);
-
LongValue()方法。將int轉位Long
-
parseInt()方法,將string轉為int。如果不行丟擲NumberFormatException。可以使用radix規定由那種進位制轉換。
public static int parseInt(String s)
public static int parseInt(String s, int radix)
//eg
int num = Integer.parseInt("123");
num = Integer.parseInt("1100110", 2);
- reverse()方法,將int按照二進位制位反轉。
public static int reverse(int i)
//eg
int num = Integer.reverse(2333);
- toString() 方法,將int轉為String。注意這是在Integer上進行的操作,int不行。
public String toString()
public static String toString(int i)
public static String toString(int i, int radix)
public static String toBinaryString(int i)//二進位制
public static String toOctalString(int i)//八進位制
public static String toHexString(int i)//十六進位制
//eg
Integer n = Integer.valueOf(2);
String s = n.toString();
s = Integer.toString(2);
s = Integer.toString(2, 8);
s = Integer.toBinaryString(2);
s = Integer.toOctalString(2);
s = Integer.toHexStrin(2);
- valueOf()方法,返回一個Integer物件。可以用radix表示輸入String的進位制格式。
public static Integer valueOf(int i)
public static Integer valueOf(String s)
public static Integer valueOf(String s, int radix)
//eg
Integer n = Integer.valueOf(2);
//更多用於這樣格式
int a = Integer.valueOf(123).intValue();
Queue 類
源自於java.util。
佇列是一種特殊的線性表,它只允許在表的前端進行刪除操作,而在表的後端進行插入操作。
LinkedList類實現了Queue介面,因此我們可以把LinkedList當成Queue來用。Queue介面與List、Set同一級別,都是繼承了Collection介面。LinkedList實現了Queue介面。Queue介面窄化了對LinkedList的方法的訪問許可權(即在方法中的引數型別如果是Queue時,就完全只能訪問Queue介面所定義的方法 了,而不能直接訪問 LinkedList的非Queue的方法),以使得只有恰當的方法才可以使用.BlockingQueue,Deque等繼承了Queue介面。
基於Collection的操作,Queue提供了額外的失敗時返回異常的增查改函式,而我們常用的則是返回特定的值(null,false等),後者用於對於Queue大小有要求的情況下,正常來說插入新元素進入Queue是不會失敗的。
Throws exceptio | Returns special value | |
---|---|---|
Insert | add(e) | offer(e) |
Remove | remove() | poll() |
Examine | element() | peek() |
- Constructor()方法。建立一個新的Queue
public Queue<T>();
//eg
Queue<Integer> queue = new LinkedList<>();
- add()方法。增加一個元素,如果佇列已滿,則丟擲一個IIIegaISlabEepeplian異常
public boolean add(E e)
//eg
Queue<Integer> queue = new LinkedList<>();
boolean empty = queue.add(123);
queue.add(234);
- remove()方法。移除並返回佇列頭部的元素,如果佇列為空,則丟擲一個NoSuchElementException異常
public E remove()
//eg
Queue<Integer> queue = new LinkedList<>();
int a = queue.remove();
- element()方法。返回佇列頭部的元素,如果佇列為空,則丟擲一個NoSuchElementException異常
public E element(int index)
//eg
Queue<Integer> queue = new LinkedList<>();
int a = queue.element();
- offer()方法。新增一個元素並返回true,如果佇列已滿,則返回false
public boolean offer(E e)
//eg
Queue<Integer> queue = new LinkedList<>();
queue.offer(123);
- poll()方法。移除並返問佇列頭部的元素 如果佇列為空,則返回null