學(xué)習(xí)目的
- 了解JDK提供java開發(fā)框架、JRE環(huán)境
- 了解java開發(fā)的常用包,及其作用
- 學(xué)會(huì)查看每一個(gè)java包的底層源碼實(shí)現(xiàn)
- 掌握java.util工具包的常用接口和類,以及常用的方法
java常見包
| 包名 | 解釋 | 備注 |
|---|---|---|
| java.util | 常用工具類包 | |
| java.lang | 程序設(shè)計(jì)基礎(chǔ)類包 | java核心類包 |
| java.text | 文本格式包 | 用于格式化和分析類,整理字符串類 |
| java.io | 輸入、輸出接口包 | 文件傳輸包 |
| java.sql | 數(shù)據(jù)庫處理包 | 將 SQL 語句傳遞給數(shù)據(jù)庫 |
| java.beans | 可復(fù)用、可重用組件 | 可視化操作組件 |
一、java.util
- 概念
util包即java工具類包,是java開發(fā)框架中的萬能工具。包含 collection 框架、遺留的 collection 類、事件模型、日期和時(shí)間設(shè)施、國際化接口等,提供各種實(shí)用工具類,如字符串標(biāo)記生成器、隨機(jī)數(shù)生成器和位數(shù)組。
1.1 接口
| 接口 | 名稱 | 備注 |
|---|---|---|
| Iterator | 迭代器接口 | 迭代、遍歷集合 |
| Collection | 線性集合接口 | 提供各種數(shù)據(jù)結(jié)構(gòu)的集合 |
| Comparator | 集合排序比較函數(shù) | 對(duì)集合對(duì)象強(qiáng)行排序 |
| Map | 鍵值對(duì)集合接口 | key-value存儲(chǔ)數(shù)據(jù)的集合 |
| Queue | 消息隊(duì)列接口 | |
| EventListener | 事件監(jiān)聽器 |
1.1.1 Iterator迭代器
- 簡述
Collection集合的父類接口。對(duì) collection集合進(jìn)行迭代遍歷的迭代器,取代了 Java集合框架中的枚舉Enumeration。 - 作用
Collection子類通過調(diào)用itrator()方法,返回一個(gè)在當(dāng)前collection集合對(duì)象上的迭代器對(duì)象,使用該迭代器對(duì)象對(duì)集合進(jìn)行迭代遍歷。 - 常見常見子接口和實(shí)現(xiàn)類
- 子接口:Collection接口、XMLEventReader
- 實(shí)現(xiàn)類:Scanner
- 底層實(shí)現(xiàn)及常用方法
- boolean hasNext():如果collection集合中仍有元素可以迭代遍歷,則返回 true
- E next():返回對(duì)集合進(jìn)行迭代得到的下一個(gè)元素,E為泛型(不指定數(shù)據(jù)類型)
- void remove(Object o):從迭代器指向的 collection集合中移除迭代器返回的最后一個(gè)元素(可選操作 o)
//底層源碼
public interface Iterator<E> {
//判斷是否有下一個(gè)可以迭代的元素
boolean hasNext();
//獲取迭代得到的下一個(gè)元素
E next();
//接口的默認(rèn)實(shí)現(xiàn):移除集合中迭代得到的下一個(gè)元素
default void remove() {
throw new UnsupportedOperationException("remove");
}
//接口的默認(rèn)實(shí)現(xiàn):forEach循環(huán)增強(qiáng)遍歷
default void forEachRemaining(Consumer<? super E> action) {
Objects.requireNonNull(action);
while (hasNext())
action.accept(next());
}
}
1.1.2 Collection
- 簡述
Collection 是集合層次結(jié)構(gòu)中的根接口。Collection表示一組對(duì)象,這些對(duì)象稱為集合的元素。在Collection的子類集合中,一些集合是有序,且允許有重復(fù)的元素(如List);而另一些則是無序,且不允許有重復(fù)元素的(如Set)。 - 作用
JDK 不提供Collection接口的任何直接實(shí)現(xiàn),需要使用 多態(tài)和更具體的子接口(如 Set 、List)才能實(shí)現(xiàn)Collection接口,從而重寫調(diào)用Collection接口的方法。 - 常見子接口和實(shí)現(xiàn)類
- 子接口:List、Set、SortedSet、Queue
- 實(shí)現(xiàn)類:AbstractCoolection、AbstractList、AbstractSet、AbstractQueue、LinkedList、HashSet、TreeSet、Stack、Vector
- 底層實(shí)現(xiàn)及常用方法
public interface Collection<E> extends Iterable<E> {
// Query Operations,查詢操作
//返回集合中的元素個(gè)數(shù)
int size();
//判斷該集合是否有元素,該方法底層實(shí)現(xiàn)使用 size=0判斷
boolean isEmpty();
//判斷此集合中是否包含指定元素o,contains()底層使用equals(o)方法進(jìn)行比較實(shí)現(xiàn)
boolean contains(Object o);
//返回一個(gè)在此集合對(duì)象上產(chǎn)生的 迭代器對(duì)象
Iterator<E> iterator();
//返回包含了此集合所有元素的 一個(gè)數(shù)組對(duì)象
Object[] toArray();
// Modification Operations,修改操作
//往集合中添加元素
boolean add(E e);
//(刪除)移除此集合中指定的單個(gè)元素o
boolean remove(Object o);
// Bulk Operations,塊操作
boolean containsAll(Collection<?> c);
boolean addAll(Collection<? extends E> c);
boolean removeAll(Collection<?> c);
boolean retainAll(Collection<?> c);
//(清空)移除此集合中的所有元素
void clear();
// Comparison and hashing,比較和哈希操作
//判斷此collection對(duì)象 與 指定對(duì)象o是否相等
boolean equals(Object o);
//返回此collection對(duì)象的哈希碼值
int hashCode();
//以下方法從JDK1.8版本開始:@since 1.8
}
1.1.3 Comparator
簡述
強(qiáng)行對(duì)某個(gè) collection對(duì)象(該對(duì)象本身存儲(chǔ)是無序的)進(jìn)行整體排序的比較函數(shù)接口。一個(gè)集合對(duì)象需要對(duì)其存儲(chǔ)的元素進(jìn)行排序時(shí),存儲(chǔ)的元素若是自定義類型的,該元素就可以實(shí)現(xiàn)Comparator接口,使得元素在集合中完成排序。作用
自定義類型的元素實(shí)現(xiàn)Comparator接口,并重寫其compare()方法后,可以讓該類型元素在集合中完成排序。常見實(shí)現(xiàn)類
底層實(shí)現(xiàn)及常用方法
- int compare(T o1, T o2):比較用來排序的兩個(gè)參數(shù);根據(jù)第一個(gè)參數(shù)小于、等于或大于第二個(gè)參數(shù)分別返回負(fù)整數(shù)、零或正整數(shù)。
- 返回>o:
- 返回=0:說明兩個(gè)對(duì)象o1和o2相等
- 返回<0:
@FunctionalInterface
public interface Comparator<T> {
//比較用來排序的兩個(gè)對(duì)象參數(shù)
int compare(T o1, T o2);
//判斷某個(gè)對(duì)象obj是否 與此 Comparator對(duì)象相等
boolean equals(Object obj);
//以下為JDK1.8版本后加入的默認(rèn)實(shí)現(xiàn)方法
}
1.1.4 Map<K,V>
- 簡述
Map<K,V>簡稱映射,是將 鍵key映射到值的對(duì)象,<K,V>中的K是泛型,限定鍵key的數(shù)據(jù)類型;V也是泛型,限定值value的數(shù)據(jù)類型。Map中一個(gè)映射不能包含重復(fù)的鍵key,每個(gè)鍵最多只能映射到一個(gè)值value。 - 作用
提供一種圖表式的結(jié)構(gòu)存儲(chǔ)數(shù)據(jù)。Map接口還取代了 Dictionary 類,后者完全是一個(gè)抽象類,而不是一個(gè)接口。 - 常見常見子接口和實(shí)現(xiàn)類
- 子接口:SortedMap<K,V>
- 實(shí)現(xiàn)類:AbstractMap,ConcurrentHashMap,HashMap,LinkedHashMap,Properties,TreeMap
- 底層實(shí)現(xiàn)及常用方法
public interface Map<K,V> {
// Query Operations,查詢操作
//返回此映射中 鍵-值對(duì)的個(gè)數(shù)
int size();
//判斷該映射中是否包含 鍵-值對(duì)關(guān)系
boolean isEmpty();
//判斷包含指定鍵key的映射關(guān)系
boolean containsKey(Object key);
//判斷指定是否存在key可以映射到指定值value
boolean containsValue(Object value);
// 根據(jù)指定key返回value;無映射則返回null
V get(Object key);
// Modification Operations,修改操作
//將指定key與value加入映射中,若以前就包含該鍵的映射關(guān)系,則用 指定值 替換 舊值
V put(K key, V value);
//如果存在指定key的映射關(guān)系,則將該key從映射中移除;返回key對(duì)應(yīng)的value
V remove(Object key);
// Bulk Operations,塊操作
//從指定映射中 將所有鍵-值對(duì)關(guān)系m 復(fù)制到此映射中
void putAll(Map<? extends K, ? extends V> m);
//移除所有的鍵-值對(duì)關(guān)系
void clear();
// Views,視圖
//返回此映射中 所有鍵的set視圖;將所有key抽出來放到set集合中
Set<K> keySet();
//返回此映射中 所有值的collection視圖;將所有value抽出來放到collection集合中<collection可重復(fù)>
Collection<V> values();
//返回此映射中 所有鍵-值對(duì)關(guān)系的set視圖;map中key-value的形式變成set中"key=value"的形式,Entry<>是Map的靜態(tài)內(nèi)部類(接口)
Set<Map.Entry<K, V>> entrySet();
// Comparison and hashing,比較與哈希
//比較指定對(duì)象與此映射是否相等,比較的是 映射 與 映射
boolean equals(Object o);
//返回此映射的哈希碼值
int hashCode();
// Defaultable methods,JDK8后的默認(rèn)實(shí)現(xiàn)
1.1.5 Queue消息隊(duì)列接口
- 簡述
隊(duì)列指的是 在處理元素前,用于保存元素的 collection集合。除了基本的collection操作外,隊(duì)列還提供其他的插入、提取和檢查操作。 - 作用
隊(duì)列通常以 FIFO(先進(jìn)先出)的方式排序各個(gè)元素。不過 優(yōu)先級(jí)隊(duì)列和 LIFO隊(duì)列(或堆棧)例外,前者根據(jù)提供的比較器或元素的自然順序?qū)υ剡M(jìn)行排序,后者按 LIFO(后進(jìn)先出)的方式對(duì)元素進(jìn)行排序。 - 常見常見子接口和實(shí)現(xiàn)類
- 子接口:BlockingDeque阻塞雙端隊(duì)列,BlockingQueue阻塞隊(duì)列
- 實(shí)現(xiàn)類:AbstractQueue,ArrayDeque數(shù)組雙端隊(duì)列
- 底層實(shí)現(xiàn)及常用方法
//Queue底層源碼實(shí)現(xiàn)
public interface Queue<E> extends Collection<E> {
//將指定元素插入此隊(duì)列(如果立即可行且不會(huì)超出容量限制),成功時(shí)返回 true,如果當(dāng)前沒有可用空間則拋出 IllegalStateException
boolean add(E e);
//將指定元素插入此隊(duì)列,當(dāng)使用有容量限制的隊(duì)列時(shí),此方法優(yōu)先級(jí)高于add(E e )
boolean offer(E e);
//獲取并移除此隊(duì)列的頭,此隊(duì)列為空時(shí)將拋出一個(gè)異常;返回隊(duì)列的頭
E remove();
//獲取并移除此隊(duì)列的頭,如果此隊(duì)列為空則返回 null;返回隊(duì)列的頭
E poll();
//獲取但是不移除此隊(duì)列的頭,此隊(duì)列為空時(shí)將拋出一個(gè)異常;返回隊(duì)列的頭
E element();
//獲取但不移除此隊(duì)列的頭;如果此隊(duì)列為空則返回 null;返回隊(duì)列的頭
E peek();
}
1.1.6 EventListener事件監(jiān)聽器接口
簡述
EventListener是所有事件偵聽器接口必須擴(kuò)展的標(biāo)記接口。作用
常見常見子接口和實(shí)現(xiàn)類
- 子接口:
- 實(shí)現(xiàn)類:
- 底層實(shí)現(xiàn)及常用方法
//EventListener事件監(jiān)聽器在底層并沒有任何可實(shí)現(xiàn)的方法,只是一種規(guī)定
public interface EventListener {
}
1.1.7 Deque<E>雙端隊(duì)列
- 簡述
一個(gè)線性 collection,支持在兩端插入和移除元素。
1.2 常用類
| 類名 | 作用 | 備注 |
|---|---|---|
1.2.1 Scanner文本掃描器
簡述
一個(gè)可以使用正則表達(dá)式來解析基本類型和字符串的簡單文本掃描器。作用
常見父類或接口
底層實(shí)現(xiàn)及常用方法
1.2.2
簡述
作用
常見父類或接口
底層實(shí)現(xiàn)及常用方法
1.2.3
簡述
作用
常見父類或接口
底層實(shí)現(xiàn)及常用方法
1.2.4
- 簡述
- 作用
- 常見父類或接口
- 底層實(shí)現(xiàn)及常用方法
1.2.5
- 簡述
- 作用
- 常見父類或接口
- 底層實(shí)現(xiàn)及常用方法
1.2.6
- 簡述
- 作用
- 常見父類或接口
- 底層實(shí)現(xiàn)及常用方法
1.2.7
- 簡述
- 作用
- 常見父類或接口
- 底層實(shí)現(xiàn)及常用方法
1.2.8
- 簡述
- 作用
- 常見父類或接口
- 底層實(shí)現(xiàn)及常用方法
1.2.9 ArrayList數(shù)組列表集合
- 簡述
- 作用
- 常見父類或接口
- 底層實(shí)現(xiàn)及常用方法
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
//創(chuàng)建一個(gè)集合時(shí)的默認(rèn)容量10
private static final int DEFAULT_CAPACITY = 10;
//創(chuàng)建一個(gè)空元素的Object數(shù)組--存放集合元素
private static final Object[] EMPTY_ELEMENTDATA = {};
//
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
1.2.10
- 簡述
- 作用
- 常見父類或接口
- 底層實(shí)現(xiàn)及常用方法
1.2.11
- 簡述
- 作用
- 常見父類或接口
- 底層實(shí)現(xiàn)及常用方法
1.2.12
- 簡述
- 作用
- 常見父類或接口
- 底層實(shí)現(xiàn)及常用方法
1.2.13
- 簡述
- 作用
- 常見父類或接口
- 底層實(shí)現(xiàn)及常用方法
1.2.14
- 簡述
- 作用
- 常見父類或接口
- 底層實(shí)現(xiàn)及常用方法