1. 程式人生 > >Java.util庫 + Java.lang庫基礎知識

Java.util庫 + Java.lang庫基礎知識

文章目錄

Arrays類

java.util.Arrays 類能方便地運算元組,它提供的所有方法都是靜態的。提供功能如下:

  1. 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);
  1. 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)

  1. copyOf() 方法。複製陣列為一個新的長度為newLength的陣列。可能會刪掉超出範圍的元素,如果不足則補充0或者null。
public static int[] copyOf(int[] original,
           int newLength)
//eg
int[] index = Arrays.copyOf(nums, n);
  1. copyOfRange() 方法。複製指定範圍內的陣列元素為一個新的陣列,新陣列的內容為from 到 to的元素。
    from為開始搜尋的第一個下標,包括它;to為結束搜尋的下標,不包括。
public static int[] copyOfRange(int[] original,
           int from, int to)
//eg
int[] index = Arrays.copyOf(nums, n);
  1. equals() 方法。如果兩個同樣型別陣列彼此相等,則返回 true。如果兩個陣列包含相同數量的元素,並且兩個陣列中的所有相應元素對都是相等的,則認為這兩個陣列是相等的。換句話說,如果兩個陣列以相同順序包含相同的元素,則兩個陣列是相等的。同樣的方法適用於所有的其他基本資料型別(Byte,short,Int等)。
public static boolean equals(long[] a, long[] a2)

//eg
if (Arrays.equals(nums1, nums2){
	//do something
}
  1. 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);
  1. hashCode() 方法。根據陣列內容,返回它的hash code。
public static int hashCode(Object[] a)

//eg
int hash = Arrays.hashCode(nums);
  1. 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);
    }
});
  1. 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型別引數的操作。

  1. isLetter()方法。判斷一個字元是不是字母。
public static boolean isLetter(char ch)
//eg
if (Character.isLetter('a')){
	//do something
}
  1. isDigit()方法。判斷一個字元是不是數字。
public static boolean isDigit(char ch)
//eg
if (Character.isDigit('2')){
	//do something
}
  1. isWhitespace()方法。判斷一個字元是不是空白字元。
public static boolean isWhitespace(char ch)
//eg
if (Character.isWhitespace(' ')){
	//do something
}
  1. isUpperCase()方法。判斷一個字元是不是大寫字母。
public static boolean isUpperCase(char ch)
//eg
if (Character.isUpperCase('G')){
	//do something
}
  1. isLowerCase()方法。有大寫就有小寫
public static boolean isLowerCase(char ch)
//eg
if (Character.isLowerCase('b')){
	//do something
}
  1. toUpperCase()方法。將字元轉為大寫格式。
public static char toUpperCase(char ch)
//eg
char upper = Character.toUpperCase('a');
  1. toLowerCase()方法。將字元轉為小寫格式。
public static char toLowerCase(char ch)
//eg
char lower = Character.toLowerCase('A');
  1. 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()

一些其他有用的方法:

  1. 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));
  1. 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);
  1. 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 不是集合,但是它們完全整合在集合中。
集合類詳解

  1. add()方法。增加一個元素。(optional)
public boolean add(E e)
  1. addAll()方法。將一個Collection中的元素加入另一個集合中。(optional)
public boolean addAll(Collection<? extends E> c )
  1. clear()方法。刪除Collection中的所有元素。(optional)
public void clear(E e)
  1. contains()方法。判斷collection 是否包含某個元素。
public boolean contains(Object o)
  1. containsAll()方法。判斷collection 是否包含某collection 中所有元素。
public boolean containsAll(Collection<? extends E> c )
  1. equals()方法。判斷集合是否與這個物件相同。
public boolean equals(Object o)
  1. hashCode()方法。返回collection的hash code
public int hashCode()
  1. isEmpty()方法。返回collection是否為空。
public boolean isEmpty()
  1. remove()方法。刪除collection中的一個元素。(optional)
public boolean remove(Object o)
  1. removeAll()方法。刪除collection中的所有傳入的collection的元素。(optional)
public int removeAll(Collection<? extends E> c )
  1. size()方法。返回collection大小
public int size()
  1. 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);
}
  1. 若一個類要實現Comparator介面:它一定要實現compare(T o1, T o2) 函式,但可以不實現 equals(Object obj)函式。
    為什麼可以不實現 equals(Object obj) 函式呢? 因為任何類,預設都是已經實現了equals(Object obj)的。 Java中的一切類都是繼承於java.lang.Object,在Object.java中實現了equals(Object obj)函式;所以,其它所有的類也相當於都實現了該函式。

  2. 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等。

  1. int 是基本型別,直接存數值,而Integer是物件,用一個引用指向這個物件。

  2. Java 中的資料型別分為基本資料型別和複雜資料型別int 是前者而Integer 是後者(也就是一個類);因此在類進行初始化時int類的變數初始為0.而Integer的變數則初始化為null.

初始化時:

int i = 1;
Integer i = new Integer(1);  

Integer的靜態變數有:
3. MAX_VALUE。是一個代表了 2 31 1 2^{31} - 1 的常量

public static final int MAX_VALUE
//eg
int res = Integer.MAX_VALUE;
  1. MIN_VALUE。是一個代表了 2 31 -2^{31} 的常量
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);
  1. bigCount()方法。返回二進位制表示的int中1位的個數,又被稱為population count
public static int bitCount(int i)
//eg
int n = Integer.bitCount(i);
  1. 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))
  1. compareTo()方法。比較int與被比較數的大小。
public int compareTo(Integer anotherInteger)
//eg
Integer.valueOf(x).compareTo(Integer.valueOf(y));
  1. doubleValue()方法。將int轉位double
public double doubleValue()
//eg
double d = Integer.doubleValue(x);
  1. floatValue()方法。將int轉位float
public float floatValue()
//eg
double d = Integer.floatValue(x);
  1. LongValue()方法。將int轉位Long

  2. 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);
  1. reverse()方法,將int按照二進位制位反轉。
public static int reverse(int i)
//eg
int num = Integer.reverse(2333);
  1. 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);
  1. 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()
  1. Constructor()方法。建立一個新的Queue
public Queue<T>();
//eg
Queue<Integer> queue = new LinkedList<>();
  1. add()方法。增加一個元素,如果佇列已滿,則丟擲一個IIIegaISlabEepeplian異常
public boolean add(E e)
//eg
Queue<Integer> queue = new LinkedList<>();
boolean empty = queue.add(123);
queue.add(234);
  1. remove()方法。移除並返回佇列頭部的元素,如果佇列為空,則丟擲一個NoSuchElementException異常
public E remove()
//eg
Queue<Integer> queue = new LinkedList<>();
int a = queue.remove();
  1. element()方法。返回佇列頭部的元素,如果佇列為空,則丟擲一個NoSuchElementException異常
public E element(int index)
//eg
Queue<Integer> queue = new LinkedList<>();
int a = queue.element();
  1. offer()方法。新增一個元素並返回true,如果佇列已滿,則返回false
public boolean offer(E e)
//eg
Queue<Integer> queue = new LinkedList<>();
queue.offer(123);
  1. poll()方法。移除並返問佇列頭部的元素 如果佇列為空,則返回null