JAVA核心包之java.util工具包

學(xué)習(xí)目的

  1. 了解JDK提供java開發(fā)框架、JRE環(huán)境
  2. 了解java開發(fā)的常用包,及其作用
  3. 學(xué)會(huì)查看每一個(gè)java包的底層源碼實(shí)現(xiàn)
  4. 掌握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

  1. 概念
    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迭代器

  1. 簡述
    Collection集合的父類接口。對(duì) collection集合進(jìn)行迭代遍歷的迭代器,取代了 Java集合框架中的枚舉Enumeration。
  2. 作用
    Collection子類通過調(diào)用itrator()方法,返回一個(gè)在當(dāng)前collection集合對(duì)象上的迭代器對(duì)象,使用該迭代器對(duì)象對(duì)集合進(jìn)行迭代遍歷。
  3. 常見常見子接口和實(shí)現(xiàn)類
  • 子接口:Collection接口、XMLEventReader
  • 實(shí)現(xiàn)類:Scanner
  1. 底層實(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

  1. 簡述
    Collection 是集合層次結(jié)構(gòu)中的根接口。Collection表示一組對(duì)象,這些對(duì)象稱為集合的元素。在Collection的子類集合中,一些集合是有序,且允許有重復(fù)的元素(如List);而另一些則是無序,且不允許有重復(fù)元素的(如Set)。
  2. 作用
    JDK 不提供Collection接口的任何直接實(shí)現(xiàn),需要使用 多態(tài)和更具體的子接口(如 Set 、List)才能實(shí)現(xiàn)Collection接口,從而重寫調(diào)用Collection接口的方法。
  3. 常見子接口和實(shí)現(xiàn)類
  • 子接口:List、Set、SortedSet、Queue
  • 實(shí)現(xiàn)類:AbstractCoolection、AbstractList、AbstractSet、AbstractQueue、LinkedList、HashSet、TreeSet、Stack、Vector
  1. 底層實(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

  1. 簡述
    強(qiáng)行對(duì)某個(gè) collection對(duì)象(該對(duì)象本身存儲(chǔ)是無序的)進(jìn)行整體排序的比較函數(shù)接口。一個(gè)集合對(duì)象需要對(duì)其存儲(chǔ)的元素進(jìn)行排序時(shí),存儲(chǔ)的元素若是自定義類型的,該元素就可以實(shí)現(xiàn)Comparator接口,使得元素在集合中完成排序。

  2. 作用
    自定義類型的元素實(shí)現(xiàn)Comparator接口,并重寫其compare()方法后,可以讓該類型元素在集合中完成排序。

  3. 常見實(shí)現(xiàn)類

  4. 底層實(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>

  1. 簡述
    Map<K,V>簡稱映射,是將 鍵key映射到值的對(duì)象,<K,V>中的K是泛型,限定鍵key的數(shù)據(jù)類型;V也是泛型,限定值value的數(shù)據(jù)類型。Map中一個(gè)映射不能包含重復(fù)的鍵key,每個(gè)鍵最多只能映射到一個(gè)值value。
  2. 作用
    提供一種圖表式的結(jié)構(gòu)存儲(chǔ)數(shù)據(jù)。Map接口還取代了 Dictionary 類,后者完全是一個(gè)抽象類,而不是一個(gè)接口。
  3. 常見常見子接口和實(shí)現(xiàn)類
  • 子接口:SortedMap<K,V>
  • 實(shí)現(xiàn)類:AbstractMap,ConcurrentHashMap,HashMap,LinkedHashMap,Properties,TreeMap
  1. 底層實(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ì)列接口

  1. 簡述
    隊(duì)列指的是 在處理元素前,用于保存元素的 collection集合。除了基本的collection操作外,隊(duì)列還提供其他的插入、提取和檢查操作。
  2. 作用
    隊(duì)列通常以 FIFO(先進(jìn)先出)的方式排序各個(gè)元素。不過 優(yōu)先級(jí)隊(duì)列和 LIFO隊(duì)列(或堆棧)例外,前者根據(jù)提供的比較器或元素的自然順序?qū)υ剡M(jìn)行排序,后者按 LIFO(后進(jìn)先出)的方式對(duì)元素進(jìn)行排序。
  3. 常見常見子接口和實(shí)現(xiàn)類
  • 子接口:BlockingDeque阻塞雙端隊(duì)列,BlockingQueue阻塞隊(duì)列
  • 實(shí)現(xiàn)類:AbstractQueue,ArrayDeque數(shù)組雙端隊(duì)列
  1. 底層實(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)聽器接口

  1. 簡述
    EventListener是所有事件偵聽器接口必須擴(kuò)展的標(biāo)記接口。

  2. 作用

  3. 常見常見子接口和實(shí)現(xiàn)類

  • 子接口:
  • 實(shí)現(xiàn)類:
  1. 底層實(shí)現(xiàn)及常用方法
//EventListener事件監(jiān)聽器在底層并沒有任何可實(shí)現(xiàn)的方法,只是一種規(guī)定
public interface EventListener {
}

1.1.7 Deque<E>雙端隊(duì)列

  1. 簡述
    一個(gè)線性 collection,支持在兩端插入和移除元素。

1.2 常用類

類名 作用 備注

1.2.1 Scanner文本掃描器

  1. 簡述
    一個(gè)可以使用正則表達(dá)式來解析基本類型和字符串的簡單文本掃描器。

  2. 作用

  3. 常見父類或接口

  4. 底層實(shí)現(xiàn)及常用方法

1.2.2

  1. 簡述

  2. 作用

  3. 常見父類或接口

  4. 底層實(shí)現(xiàn)及常用方法

1.2.3

  1. 簡述

  2. 作用

  3. 常見父類或接口

  4. 底層實(shí)現(xiàn)及常用方法

1.2.4

  1. 簡述
  2. 作用
  3. 常見父類或接口
  4. 底層實(shí)現(xiàn)及常用方法

1.2.5

  1. 簡述
  2. 作用
  3. 常見父類或接口
  4. 底層實(shí)現(xiàn)及常用方法

1.2.6

  1. 簡述
  2. 作用
  3. 常見父類或接口
  4. 底層實(shí)現(xiàn)及常用方法

1.2.7

  1. 簡述
  2. 作用
  3. 常見父類或接口
  4. 底層實(shí)現(xiàn)及常用方法

1.2.8

  1. 簡述
  2. 作用
  3. 常見父類或接口
  4. 底層實(shí)現(xiàn)及常用方法

1.2.9 ArrayList數(shù)組列表集合

  1. 簡述
  2. 作用
  3. 常見父類或接口
  4. 底層實(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

  1. 簡述
  2. 作用
  3. 常見父類或接口
  4. 底層實(shí)現(xiàn)及常用方法

1.2.11

  1. 簡述
  2. 作用
  3. 常見父類或接口
  4. 底層實(shí)現(xiàn)及常用方法

1.2.12

  1. 簡述
  2. 作用
  3. 常見父類或接口
  4. 底層實(shí)現(xiàn)及常用方法

1.2.13

  1. 簡述
  2. 作用
  3. 常見父類或接口
  4. 底層實(shí)現(xiàn)及常用方法

1.2.14

  1. 簡述
  2. 作用
  3. 常見父類或接口
  4. 底層實(shí)現(xiàn)及常用方法
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容