JAVA常用API總結與說明

一、JAVA常用API

java.lang.Math

提供sin, cos, tan, exp, log, log10 等類方法,PI和E等類字段

java.lang.String(StringBuilder線程不安全,StringBuffer線程安全)

char charAt(int index) 返回給定位置的代碼單元
boolean equals(Object other)
boolean equalsIngoreCase(String other)
如果字符串與other相等,返回true
忽略大小寫
int length() 返回字符串的長度
String substring(int beginIndex)
String substring(int beginIndex, int endIndex)
返回一個新字符串,包含原始字符串從beginIndex到串尾或到endIndex-1的所有代碼單元
String toLowerCase()
String toUpperCase()
返回小寫字符串
返回大寫字符串
int indexOf(String str[, int fromIndex])
int lastIndexOF(String str[, int fromIndex])
返回第一個/最後一個子串的位置,從起始位置或者fromIndex開始

java.util.Scanner

Scanner(InputStream in)
Scanner(File f)
Scanner(String data)
用給定的輸入流創建一個Scanner對象
例子:Scanner in = new Scanner(System.in)
String nextLine() 讀取輸入的下一行內容
String next() 讀取輸入的下一個單詞(以空格作為間隔)
int nextInt()
double nextDouble()
讀取並轉換下一個表示整數或浮點數的字符序列

for each循環

for(variable : collection) statement

collection這一集合表達式必須是一個數組或者是一個實現瞭Iterable接口的類對象

java.util.Arrays

static String toString(type[] a) 返回包含a中數據元素的字符串
static void sort(type[] a) 采用優化的快速排序算法對數組進行排序
static void binarySearch(type[] a, type v) 使用二分搜索算法查找值v
static Boolean equals(type[] a, type[] b) 如果兩個數字相同,返回true

數組名.length

數組長度

java.util.Radom

Random() 構建一個新的隨機數生成器
int nextInt(int n) 返回一個 0 ~ n-1之間的隨機數

java.lang.Object

String toString() 返回描述該對象值的字符串。在自定義類中應覆蓋這個方法
boolean equals(Object otherObject) 比較兩個對象是否相等。在自定義類中應覆蓋這個方法
Class getClass()
int hashCode()
返回包含對象信息的類對象
返回對象的散列碼
static wait()
static notify()
static notifyAll()

java.lang.Class

String getName() 返回這個類的名字
static Class forName(String className) 返回描述類名為className的Class對象
Object newInstance() 返回這個類的一個新實例
Field[] getFields()
Field[] getDeclareFields()
getFields()返回一個包含Field對象的數組,這些對象記錄瞭這個類或其超類的公有域
getDeclareFields()返回的Field對象記錄瞭這個類的全部域
Method[] getMethods()
Method[] getDeclareMethods()
getMethods()返回一個包含Method對象的數組,這些對象記錄瞭這個類或其超類的公用方法
getDeclareMethods()返回的Field對象記錄瞭這個類的全部方法
Constructor[] getConstructors()
Constructor[] getDeclareConstructors()
getConstructors()返回一個包含Constructor對象的數組,這些對象記錄瞭這個類的公有構造器
getDeclareConstructors()返回的Constructor對象記錄瞭這個類的全部構造器

斷言

assert 條件;

assert 條件:表達式;

二、JAVA集合框架

Java集合類庫將接口和實現分離。當程序使用集合時,一旦構建瞭集合就不需要知道究竟使用瞭哪種實現。因此,隻有在構建集合對象時,使用具體的類才有意義。可以使用接口類型存放集合的引用。利用這種方法,一旦改變想法,可以輕松使用另外一種不同的實現,隻需在對象創建處修改即可。

java.util.Collection<E>

Iterator<E> iterator() 返回一個用於訪問集合中每個元素的迭代器
int size() 返回當前存儲在集合中的元素個數
boolean isEmpty() 如果集合中沒有元素,返回true
boolean contains(Object obj)
boolean containAll(Collection<? extend E> other)
如果集合中包含相等對象,返回true
boolean add(Object element)
boolean addAll(Collection<? extend E> other)
將一個元素添加到集合中,集合改變返回true
boolean remove(Object element)
boolean removeAll(Collection<?> other)
刪除相等元素,成功刪除返回true

java.util.Iterator<E>

boolean hasNext() 如果存在可訪問的元素,返回true
E next() 返回將要訪問的下一個對象
void remove() 刪除上次訪問的元素

Java庫中具體集合

ArrayList 一種可以動態增長和縮減的索引序列
LinkedList 一種可以在任何位置進行高效插入和刪除操作的有序序列
ArrayDeque 一種用循環數組實現的雙端隊列
HashSet 一種沒有重復元素的無序集合
TreeSet 一種有序集
EnumSet 一種包含枚舉類型值的集合
LinkedHashSet 一種可以記住元素插入次序的集
PriorityQueue 一種允許高效刪除最小元素的集合
HashMap 一種存儲鍵/值關聯的數據結構
TreeMap 一種鍵值有序排列的映射表
EnumMap 一種鍵值屬於枚舉類型的映射表
LinkedHashMap 一種可以記住鍵/值項添加次序的映射表
WeakHashMap 一種其值無用武之地後可以被垃圾回收期回收的映射表
IdentityHashMap 一種用==而不是用equals比較鍵值的映射表

1、List

List接口擴展自Collection,它可以定義一個允許重復的有序集合,從List接口中的方法來看,List接口主要是增加瞭面向位置的操作,允許在指定位置上操作元素,同時增加瞭一個能夠雙向遍歷線性表的新列表迭代器ListIterator。List接口有動態數組(ArrayList類)和雙端鏈表(LinkedList類)兩種實現方式。

java.util.List<E>

ListIterator<E> listIterator()
ListIterator<E> listIterator(int index)
返回一個列表迭代器
迭代器第一次調用next返回給定位置元素
void add(int i, E element)
void addAll(int i, Colletion<? extend E> elements)
向集合指定位置添加元素
E remove(int i) 刪除給定位置元素並返回
E get(int i) 獲得給定位置元素並返回
E set(int i, E element) 設置給定位置元素並返回原來的元素
int indexOf(Object element)
int lastIndexOf(Object element)
返回與指定元素相等元素在列表中第一次出現的位置
返回與指定元素相等元素在列表中最後一次出現的位置

java.util.ListIterator<E>

void add(E Element) 在當前位置添加一個元素
void set(E Element) 用新元素代替next或previous上次訪問的元素
boolean havaPrevious() 反向迭代列表時是否還有可供訪問的值
E previous() 返回前一個對象
int nextIndex() 返回下一次調用next時返回的元素索引
int previousIndex() 返回下一次調用previous時返回的元素索引

java.util.ArrayList<E>

ArrayList<E>() 構造一個空數組列表
boolean add(E obj) 在數組列表尾端添加一個元素,永遠返回true
int size() 返回存儲在數組中的當前元素數量
void set(int index, E obj) 設置數組列表指定位置的值
E get(int index) 獲的指定位置的元素值
void add(int index, E obj) 向後移動元素,插入元素
E remove(int index) 刪除一個元素,並將後面元素前移

java.util.LinkedList<E>

LinkedList()
LinkedList(Colletion<? extend E> elements)
構造一個鏈表
void addFirst(E element)
void addLast(E element)
添加元素到表頭或表尾
E getFirst()
E getLast()
返回表頭或表尾的元素
E removeFirst()
E removeLast()
刪除表頭或表尾的元素並返回

2、Set

Set接口擴展自Collection,它與List的不同之處在於,規定Set的實例不包含重復的元素。在一個規則集內,一定不存在兩個相等的元素。AbstractSet是一個實現Set接口的抽象類,Set接口有三個具體實現類,分別是散列集HashSet、鏈式散列集LinkedHashSet和樹形集TreeSet。

java.util.HashSet<E>

HashSet()
HashSet(Colletion<? extend E> elements)
HashSet(int initialCapacity)
構造散列表

java.util.LinkedHashSet<E>

LinkedHashSet是用一個鏈表實現來擴展HashSet類,它支持對規則集內的元素排序。HashSet中的元素是沒有被排序的,而LinkedHashSet中的元素可以按照它們插入規則集的順序提取。

java.util.TreeSet<E>TreeSet擴展自AbstractSet,並實現瞭NavigableSet,AbstractSet擴展自AbstractCollection,樹形集是一個有序的Set,其底層是一顆樹,用紅黑樹實現,這樣就能從Set裡面提取一個有序序列瞭。在實例化TreeSet時,我們可以給TreeSet指定一個比較器Comparator來指定樹形集中的元素順序。樹形集中提供瞭很多便捷的方法。

3、隊列

java.util.Queue<E>(接口)

boolean add(E element)
boolean offer(E element)
如果隊列沒有滿,將元素添加到隊列尾部
E remove()
E poll()
如果隊列不為空,刪除並返回這個隊列頭部元素
E element()
E peek()
如果隊列不為空,返回這個隊列頭部元素

java.util.Deque<E>

接口Deque,是一個擴展自Queue的雙端隊列,它支持在兩端插入和刪除元素,Deque接口由ArrayDeque和LinkedList這兩個類實現,所以通常我們可以使用LinkedList來創建一個隊列。PriorityQueue類實現瞭一個優先隊列,優先隊列中元素被賦予優先級,擁有高優先級的先被刪除。

java.util.ProrityQueue<E>

優先級隊列中的元素可以按任意順序插入,卻總是按照排序的順序進行檢索。優先級隊列由堆實現。堆是一個可以自我調整的二叉樹,對樹執行添加和刪除操作,可以讓最小元素移動到根(最小堆),而不必花費時間對元素進行排序

4、Map接口

Map,圖,是一種存儲鍵值對映射的容器類,在Map中鍵可以是任意類型的對象,但不能有重復的鍵,每個鍵都對應一個值,真正存儲在圖中的是鍵值構成的條目。

java.util.Map<K,V>

V get(Object key) 獲得與鍵對應的值
V put(K key, V value)
V putAll(Map<? extends K, ? extends V> entries)
將鍵與對應的值關系插入到映射中
boolean containKey(Object key)
boolean containValue(Object value)
查詢

java.util.HashMap<K,V>

HashMap是基於哈希表的Map接口的非同步實現,繼承自AbstractMap,AbstractMap是部分實現Map接口的抽象類。在之前的版本中,HashMap采用數組+鏈表實現,即使用鏈表處理沖突,同一hash值的鏈表都存儲在一個鏈表裡。但是當鏈表中的元素較多,即hash值相等的元素較多時,通過key值依次查找的效率較低。而JDK1.8中,HashMap采用數組+鏈表+紅黑樹實現,當鏈表長度超過閾值(8)時,將鏈表轉換為紅黑樹,這樣大大減少瞭查找時間。

java.util.LinkedHashMap<K,V>

LinkedHashMap繼承自HashMap,它主要是用鏈表實現來擴展HashMap類,HashMap中條目是沒有順序的,但是在LinkedHashMap中元素既可以按照它們插入圖的順序排序,也可以按它們最後一次被訪問的順序排序。

java.util.TreeHashMap<K,V>

TreeMap基於紅黑樹數據結構的實現,鍵值可以使用Comparable或Comparator接口來排序。TreeMap繼承自AbstractMap,同時實現瞭接口NavigableMap,而接口NavigableMap則繼承自SortedMap。SortedMap是Map的子接口,使用它可以確保圖中的條目是排好序的。在實際使用中,如果更新圖時不需要保持圖中元素的順序,就使用HashMap,如果需要保持圖中元素的插入順序或者訪問順序,就使用LinkedHashMap,如果需要使圖按照鍵值排序,就使用TreeMap。

5、其他集合類

下面主要介紹一下其它幾個特殊的集合類,Vector、Stack、HashTable、ConcurrentHashMap以及CopyOnWriteArrayList。

java.util.Vector<E>

用法上,Vector與ArrayList基本一致,不同之處在於Vector使用瞭關鍵字synchronized將訪問和修改向量的方法都變成同步的瞭,所以對於不需要同步的應用程序來說,類ArrayList比類Vector更高效。

java.util.Stack<E>

Stack,棧類,是Java2之前引入的,繼承自類Vector。

java.util.HashTable

HashTable和前面介紹的HashMap很類似,它也是一個散列表,存儲的內容是鍵值對映射,不同之處在於,HashTable是繼承自Dictionary的,HashTable中的函數都是同步的,這意味著它也是線程安全的,另外,HashTable中key和value都不可以為null。

java.util.ConcurrentHashMap

ConcurrentHashMap是HashMap的線程安全版。同HashMap相比,ConcurrentHashMap不僅保證瞭訪問的線程安全性,而且在效率上與HashTable相比,也有較大的提高。

java.util.CopyOnWriteArrayList

CopyOnWriteArrayList,是一個線程安全的List接口的實現,它使用瞭ReentrantLock鎖來保證在並發情況下提供高性能的並發讀取。

java.util.CopyOnWriteArraySet

CopyOnWriteArraySet,是一個線程安全的set接口的實現,它使用瞭ReentrantLock鎖來保證在並發情況下提供高性能的並發讀取。

ConcurrentLinkedQuerue是一個先進先出的隊列。它是非阻塞隊列。

ConcurrentSkipListMap可以在高效並發中替代SoredMap(例如用Collections.synchronzedMap包裝的TreeMap)。

ConcurrentSkipListSet可以在高效並發中替代SoredSet(例如用Collections.synchronzedSet包裝的TreeMap)。

6、泛型集合算法

6.1  排序

static <T extends Comparable<? super T>> void java.util.Collections.sort(List<T> elements,[new Comparator<T>(){ public int compare(T o1, T o2){return …}   } ]) 對列表元素排序

6.2  查找

static <T extends Comparable<? super T>> int java.util.Collections.binarySearch(List<T> elements, T key) 二分查找key,返回對象索引

6.3  其他

static <T> java.util.Collections.min(Collection<T> elements, Comparator<? super T> c)
static <T> java.util.Collections.max(Collection<T> elements, Comparator<? super T> c)
查找最小值/最大值

三、並發部分API

java.lang.Runnable

void run() 必須覆蓋這個方法

java.lang.Thread

Thread()
Thread(Runnable target)
構造器
void start() 啟動線程
void run() 如果沒有重寫,調用關聯Runnable的run方法
void interupt() 中斷線程(中止阻塞狀態,對運行線程無作用)
void setPriority(int newPriority) 設置優先級(1-10,默認5)
static void yield()
static void sleep(long millis)
使當前線程處於讓步狀態(讓步於同優先級或高優先級線程)
休眠
void setDaemon() 設置為守護線程
Thread.State getState() 獲得線程當前狀態

鎖對象

ReentrantLock myLock = new ReentrantLock();
mylock.lock();
try{
critical section
}finally{
mylock.unlock();
}

條件對象

private ReetranLock mylock = new ReetranLock();
private Condition sufficientFunds = mylock.newCondition()
public void transfer(int from, int amount)
{
mylock.lock();
try{
while(account[from] < amount){
sufficientFunds.await();
}
...
sufficientFunds.singalAll();
}finally{
mylock.unlock();
}
}

synchronized關鍵字(內置鎖)

格式1:synchronized 方法

格式2:synchronized(obj){}

使用synchronized如何設置條件變量

void notifyAll() 解除在對象上調用wait方法的線程的阻塞狀態
void wait() 導致線程進入等待狀態

volatile域

volatile隻提供可見性(在線程工作內存中被修改後立即寫入到主存中),不提供原子性。
使用final變量可以保證可見性:構造函數完成時即不變,未完成構造期間對其他線程不可見。

java.lang.ThreadLocal<T>

作用:將內存共享變量變為線程拷貝變量

Executor類執行器

1)調用Executors類(工廠類)中靜態工廠方法newCacherThreadPool
2)調用submit提交Runnable或Callable對象
3)當不再提交任何任務時,調用shutdown

本文總結瞭JAVA常用API並附上瞭說明,更多關於JAVA常用API請查看下面的相關鏈接

推薦閱讀: