Java核心類庫(上)


Java核心類庫

1. 常用的類

1.1 常用的包與功能描述

  • java.lang 核心包,jvm自動導入。包含System,String......類。
  • java.util 工具包,包含大量工具類與集合類,如Scanner,Random,List等。
  • java.io 輸入輸出包,關於讀寫文件相關的類,FileInputStream,FileOutputStream等。
  • java.net 網絡包,提供大量網絡編程相關類,ServerSocket,Socket等。
  • java.sql 數據包,提供操作數據庫的相關類,DriverManager類,Connection接口等。

1.2 Object類

  • Object是java語言結構中的根,定義了“對象”的行為。所有類都是它的子類或是間接子類。如果一個雷沒有使用extends聲明父類,那么將默認繼承自Object。
  • Object()使用無參構造對象;boolean equals(Object obj)默認比較兩個的地址;int hashCode()獲取哈希碼;String toString()返回調用對象的字符串形式(以上方法通常會重寫);Class<?> getClass()返回調用對象的Class實例,反射用。

1.2.1 包裝類

  • 包裝類是面向對象的一種思想,是指把一個變量打包封裝處理變成對象,在這個流程中把變量聲明為成員變量進行對象化處理的相關類。
  • 在lang包中有如下分類:java.lang.Byte/Short/Integer/Long/Float/Double/Boolean/Character
    分別對應byte/short/int/int/long/float/double/boolean/char

1.2.2 Integer類

  • Integer類的內部包裝了一個int類型的變量作為成員變量,並且提供由int到String類型之間的轉換等方法。
    | | |
    | ---- | ---- |
    | Integer(int value) | 根據參數指定的整數來構造對象(已過時) |
    | Integer(String s) | 根據參數指定的字符串來構造對象 (已過時) |
    | int intValue() | 獲取調用對象中的整數值並返回 |
    | static Integer valueOf(int i) | 根據參數指定整數值得到Integer類型對象 |
    | boolean equals(Object obj) | 比較調用對象與參數指定的對象是否相等 |
    | String toString() | 返回描述調用對象數值的字符串形式 |
    | static int parseInt(String s) | 將字符串類型轉換為int類型並返回 |
    | static String toString(int i) | 獲取參數指定整數的十進制字符串形式 |
    | static String toBinaryString(int i) | 獲取參數指定整數的二進制字符串形式 |
    | static String toHexString(int i) | 獲取參數指定整數的十六進制字符串形式 |
    | static String toOctalString(int i) | 獲取參數指定整數的八進制字符串形式 |

自動裝箱池

  • Integer內部采用了自動裝箱池的概念,打包好了-128到127之間的所有整數,直接調用池中的對象即可,提高效率。

1.2.3 Double類

  • Double內部包裝了一個double類型的變量作為成員變量,主要用於實現對double類型的包裝並提供double類型到String類之間的轉換等方法。
  • 常用常量 public static final int SIZE--表示double類型的二進制數,public static final int BYTES--表示double類型的字節個數,public static final Class TYPE--表示double類型的Class實例
Double(double value) 根據參數指定的浮點數據來構造對象(已過時)
Double(String s) 根據參數指定的字符串來構造對象 (已過時)
double doubleValue() 獲取調用對象中的浮點數據並返回
static Double valueOf(double d) 根據參數指定浮點數據得到Double類型對象
boolean equals(Object obj) 比較調用對象與參數指定的對象是否相等
String toString() 返回描述調用對象數值的字符串形式
static double parseDouble(String s) 將字符串類型轉換為double類型並返回
boolean isNaN() 判斷調用對象的數值是否為非數字

1.2.4 Boolean類

  • public static final Boolean FALSE--對應基值為false的對象,public static final Boolean TRUE--對應基值為true的對象,public static final Class TYPE--表示boolean類型的Class實例
Boolean(boolean value) 根據參數指定的布爾數值來構造對象(已過時)
Boolean(String s) 根據參數指定的字符串來構造對象 (已過時)
boolean booleanValue() 獲取調用對象中的布爾數值並返回
static Boolean valueOf(boolean b) 根據參數指定布爾數值得到Boolean類型對象
boolean equals(Object obj) 比較調用對象與參數指定的對象是否相等
String toString() 返回描述調用對象數值的字符串形式
static boolean parseBoolean(String s) 將字符串類型轉換為boolean類型並返回

1.2.5 Character類

  • public static final int SIZE 表示char類型的二進制位數,public static final int BYTES 表示char類型的字節個數,public static final Class TYPE 表示char類型的Class實例
Character(char value) 根據參數指定的字符數據來構造對象(已過時)
char charValue() 獲取調用對象中的字符數據並返回
static Character valueOf(char c) 根據參數指定字符數據得到Character類型對象
boolean equals(Object obj) 比較調用對象與參數指定的對象是否相等
String toString() 返回描述調用對象數值的字符串形式
static boolean isUpperCase(char ch) 判斷參數指定字符是否為大寫字符
static boolean isLowerCase(char ch) 判斷參數指定字符是否為小寫字符
static boolean isDigit(char ch) 判斷參數指定字符是否為數字字符
static char toUpperCase(char ch) 將參數指定的字符轉換為大寫字符
static char toLowerCase(char ch) 將參數指定的字符轉換為小寫字符

1.2.6 String類(重點) ⭐

  • java.lang.String用於描述字符串,Java中的所有的字符串的字面值都可以用這個類描述。
  • 從jdk1.9開始底層放棄char[]改用byte[]加編碼標記,節約了一些空間。
    該類表述的是一個常量,不可被更改。

String類中的常量池

  • 由於String類中出現的字符串是常量不可被改變,所以JVM將第一次出現的字符串加入到常量池中,后續代碼出現相同的字符串直接使用常量池中的對象,提高了性能。

常量優化機制

常用的構造方法

String() 使用無參方式構造對象得到空字符序列
String(byte[] bytes,int offset,int length) 使用bytes數組的下標從offset開始的length個字節構造對象
String(byte[] bytes) 使用bytes數組中的所有內容構造對象
String(char[] value, int offset,int count) 使用value數組的下標從offset開始的count個字符來構造對象
String(char[] value) 使用value數組的內容構造對象
Sting(Sting original) 根據參數指定的字符串來構造對象,新創建的對象是參數對象的副本

常用的成員方法

String toString() 返回字符串本身
byte[] getBytes() 將當前字符串內容轉換為byte數組並返回
char[] toCharArray() 轉換為char數組並返回
char charAt(int index) 返回指定位置的字符
int length() 返回字符串序列的長度
boolean isEmpty() 判斷字符串是否為空

  • 比較字符串內容
    | | |
    |:--😐:--😐
    |int compareTo(String anotherString)|用於比較調用對象和參數的大小關系|
    |int compareTolgnoreCase(String str)|不考慮大寫,比較字符串內容|
String concat(String str) 用於實現字符串的拼接
boolean contains(CharSequence s) 用於判斷當前字符串是否包含參數指定的內容
String toLowerCase() 返回小寫形式
String toUpperCase() 返回大寫形式
String trim() 去掉前導和后繼空白的字符串
boolean startsWith(String prefix) 判斷字符串是否以參數字符串開頭
boolean startsWith(String prefix,int toffset) 從指定位置開始是否以參數字符串開頭
boolean endsWith(String sufflx) 判斷字符串是否以參數字符串結尾
boolean equals(Object anObject) 用於比較字符串內容是否相等並返回
int hashCode() 獲取調用對象的哈希碼值
boolean equalsIgnoreCase(String anoterString) 用於比較字符串內容是否相等,忽略大小寫
int indexOf(int ch) 返回當前字符串中參數ch指定的字符第一次出現的下標
int indexOf(int ch,int fromlndex) 用於從fromlndex位置開始查找ch指定的字符
int indexOf(String str) 在字符串中檢索str返回其第一次出現的位置,沒有就返回-1
int lastIndexOf(int ch) 用於返回參數ch指定的字符最后一次出現的下標
int lastIndexOf(int ch,int fromIndex) 返回從fromIndex位置開始查找ch字符出現的下標
int lastIndexOf(String str) 返回str字符最后一次出現的下標
int lastIndexOf(String str,int fromIndex) 用於從fromIndex位置開始反向搜索的第一次出現的下標
String substring(int beginIndex,int endIndex) 返回字符串中從下標beginIndex(包括)開始到endIndex(不包括)結束的子字符串
String substring(int beginIndex) 返回字符串中從下標gebinIndex(包括)開始到字符串結尾的子字符串

正則表達式通常使用^開頭,$結尾,也可以忽略

[abc] 可以出現abc
[^abc] 除了abc
[a-z] a到z所有字符
[a-zA-Z0-9] 大小寫a到z,0到9
. 任意一個字符
\d 任意數字
\D 任意非數字
\s 空白字符串,等同於[\t\n\x0B\r]
\w 任意單詞字符(數字字母下划線)
\W 任意非單字字符
X? 表示X可以出現0或者1次
X * 表示X可以出現0次或N次
X+ 表示X不能不出現
X{n} 必須出現N次
X{n, } X必須出現大於N次
X{n,m} X必須至少出現N次,不能超過M次
boolean matches(String regex) 判斷是否符合正則匹配規則
String[] split(String regex) 參數regex是正則表達式,以regex表示的字符分割,將字符串拆分成字符串數組
String replace(char oldChar,char newChar) 用new替換掉所有出現的old
String replaceFirst(String regex,String replacement) 替換此字符串匹配給定的正則表達式的第一個字符串
String replaceAll(String regex,String replacement) 將字符串中匹配正則regex的字符串替換成replacement

2. 可變字符串

  • StringBuffer類是從jdk1.0開始存在,屬於線程安全的類,因此效率比較低。
  • StringBuilder類是從jdk1.5開始存在,屬於非線程安全的類,效率比較高。

2.1 StringBulider常用構造方法

StringBulider() 使用無參方式構造對象,容量16
StringBulider(int capacity) 使用參數指定的容量構造對象
StringBulider(String str) 使用參數指定字符串構造對象,長度為字符串長度+16

2.2 StringBulider常用成員方法

int capacity() 返回調用對象的長度
int length() 返回字符串的長度
StringBulider insert(int offset, String srt) 插入字符串並返回調用對象的引用(自己)
StringBulider append(String srt) 追加字符串
StringBulider deleteCharAt(int index) 將當前下表為index的字符刪除
StringBulider delete(int start,int end) 刪除A-B之間的字符串
StringBulider replace(int start,int end,String str) 替換字符串
StringBulider reverse() 翻轉字符串
  • 作為參數傳遞的時候,方法內部String不會改變其值,StringBuffer和StringBuilder會改變其值。
  • StringBuilder的很多方法的返回值均為StringBuilder類型。這些方法的返回語句均為:return
    this。
  • 由此可見,這些方法在對StringBuilder所封裝的字符序列進行改變后又返回了該對象的引用。基
    於這樣設計的目的在於可以連續調用。

3. 集合

3.1 集合的由來

  • 當需要在Java程序中記錄單個數據內容時,則聲明一個變量。
  • 當需要在Java程序中記錄多個類型相同的數據內容時,聲明一個一維數組。
  • 當需要在Java程序中記錄多個類型不同的數據內容時,則創建一個對象。
  • 當需要在Java程序中記錄多個類型相同的對象數據時,創建一個對象數組。
  • 當需要在Java程序中記錄多個類型不同的對象數據時,則准備一個集合。
  • 集合框架頂層是Collection與Map,其中前者單個元素,后者單對元素。

3.2 Collection集合

  • java.util.Collection接口是List接口、Queue 接口以及Set接口的父接口,因此該接口里定義的方法既可用於操作List集合,也可用於操作Queue集合和Set集合。

3.2.1 常用方法

boolean add(E e) 向集合中添加對象
boolean addAll(Collection<? extends E>c) 用於將參數指定集合c中的所有元素添加到當前集合中
boolean contains(Object o) 判斷是否包含指定對象
boolean containsAll(Collection<?> c) 判斷是否包含參數指定的所有對象
boolean retainAll(Collection<?> c) 保留當前集合中存在且參數集合中存在的所有對象
boolean remove(Object o) 從集合中刪除對象
boolean removeAll(Collection<?> c) 從集合中刪除參數指定的所有對象
void clear() 清空集合
int size() 返回包含對象的個數
boolean isEmpty() 判斷是否為空
boolean equals(Object o) 判斷是否相等
int hashCode() 獲取當前集合的哈希碼值
Object[] toArray() 將集合轉換為數組
Iterator iterator() 獲取當前集合的迭代器

3.3 Iterator接口

3.3.1 基本概念

  • java.util.Iterator接口主要用於描述迭代器對象,可以遍歷Collection集合中的所有元素。java.util.Collection接口繼承Iterator接口,因此所有實現Collection接口的實現類都可以使用該迭代器對象。

3.3.2 常用方法

  • boolean hasNext() 判斷集合中是否有可以迭代/訪問的元素
  • E next() 用於取出一個元素並指向下一個元素
  • void remove() 用於刪除訪問到的最后一個元素

3.4 for each循環

  • for each是簡化版的迭代器
    for(元素類型 變量名 : 數組/集合名稱){循環體}

3.5 List集合⭐

3.5.1 基本概念

  • java.util.List集合是Collection集合的子集合,該集合中允許有重復的元素並且有先后放入次序。
  • 該集合的主要實現類有:ArrayList類、LinkedList類、Stack類、Vector類。
  • 其中ArrayList類的底層是采用動態數組進行數據管理的,支持下標訪問,增刪元素不方便。
  • 其中LinkedList類的底層是采用雙向鏈表進行數據管理的,訪問不方便,增刪元素方便。
  • 可以認為ArrayList和LinkedList的方法在邏輯上完全一樣,只是在性能上有一定的差別,ArrayList更適合於
    訪問而LinkedList更適合於插入和刪除;在性能要求不是特別苛刻的情形下可以忽略這個差別。
  • 其中Stack類的底層是采用動態數組進行數據管理的,該類主要用於描述一種具有后進先出特征的數據結構,叫做棧(last in first out LIFO)。
  • 其中Vector類的底層是采用動態數組進行數據管理的,該類與ArrayList類相比屬於線程安全的類,效率比較低,以后開發中基本不用。

3.5.2 常用方法

void add(int index, E element) 向集合中指定位置添加元素
boolean addAll(int index, Collection<? extends E> c) 向集合中添加所有元素
E get(int index) 從集合中獲取指定位置元素
int indexOf(Object o) 查找參數指定的對象
int lastIndexOf(Object o) 反向查找參數指定的對象
E set(int index, E element) 修改指定位置的元素
E remove(int index) 刪除指定位置的元素
List subList(int fromIndex, int toIndex) 用於獲取子List

3.6 Queue集合

3.6.1基本概念

  • java.util.Queue集合是Collection集合的子集合,與List集合屬於平級關系。
  • 該集合的主要用於描述具有先進先出特征的數據結構,叫做隊列(first in first out FIFO)。
  • 該集合的主要實現類是LinkedList類,因為該類在增刪方面比較有優勢。

3.6.2 常用的方法

boolean offer(E e) 將一個對象添加至隊尾,若添加成功則返回true
E poll() 從隊首刪除並返回一個元素
E peek() 返回隊首的元素(但並不刪除)

3.7 Set集合

3.7.1 基本概念

  • java.util.Set集合是Collection集合的子集合,與List集合平級。
  • 該集合中元素沒有先后放入次序,且不允許重復。
  • 該集合的主要實現類是:HashSet類 和 TreeSet類以及LinkedHashSet類。
  • 其中HashSet類的底層是采用哈希表進行數據管理的。
  • 其中TreeSet類的底層是采用紅黑樹進行數據管理的。
  • 其中LinkedHashSet類與HashSet類的不同之處在於內部維護了一個雙向鏈表,鏈表中記錄了元素的迭代順序,也就是元素插入集合中的先后順序,因此便於迭代。

3.7.2 HashSet集合的原理

  • 使用元素調用hashCode方法獲取對應的哈希碼值,再由某種哈希算法計算出該元素在數組中的索引位置。
  • 若該位置沒有元素,則將該元素直接放入即可。
  • 若該位置有元素,則使用新元素與已有元素依次比較哈希值,若哈希值不相同,則將該元素直接放入。
  • 若新元素與已有元素的哈希值相同,則使用新元素調用equals方法與已有元素依次比較。
  • 若相等則添加元素失敗,否則將元素直接放入即可。

3.7.3 TreeSet集合的概念

  • 二叉樹主要指每個節點最多只有兩個子節點的樹形結構。
  • 滿足以下3個特征的二叉樹叫做有序二叉樹。

a.左子樹中的任意節點元素都小於根節點元素值;
b.右子樹中的任意節點元素都大於根節點元素值;
c.左子樹和右子樹的內部也遵守上述規則;

  • 由於TreeSet集合的底層采用紅黑樹進行數據的管理,當有新元素插入到TreeSet集合時,需要使
  • 用新元素與集合中已有的元素依次比較來確定新元素的合理位置。
  • 比較元素大小的規則有兩種方式:
  • 使用元素的自然排序規則進行比較並排序,讓元素類型實現java.lang.Comparable接口;
  • 使用比較器規則進行比較並排序,構造TreeSet集合時傳入java.util.Comparator接口;
  • 自然排序的規則比較單一,而比較器的規則比較多元化,而且比較器優先於自然排序;

3.8 Map集合 ⭐

3.8.1基本概念

  • java.util.Map<K,V>集合中存取元素的基本單位是:單對元素,其中類型參數如下:
    K - 此映射所維護的鍵(Key)的類型,相當於目錄。
    V - 映射值(Value)的類型,相當於內容。
  • 該集合中key是不允許重復的,而且一個key只能對應一個value。
  • 該集合的主要實現類有:HashMap類、TreeMap類、LinkedHashMap類、Hashtable類、Properties類。
  • 其中HashMap類的底層是采用哈希表進行數據管理的。
  • 其中TreeMap類的底層是采用紅黑樹進行數據管理的。
  • 其中LinkedHashMap類與HashMap類的不同之處在於內部維護了一個雙向鏈表,鏈表中記錄了元素的迭代順序,也就是元素插入集合中的先后順序,因此便於迭代。
  • 其中Hashtable類是古老的Map實現類,與HashMap類相比屬於線程安全的類,且不允許null作為key或者value的數值。
  • 其中Properties類是Hashtable類的子類,該對象用於處理屬性文件,key和value都是String類型的。
  • Map集合是面向查詢優化的數據結構, 在大數據量情況下有着優良的查詢性能。經常用於根據key檢索value的業務場景。

3.8.2 常用方法

V put(K key, V value) 將Key-Value對存入Map,若集合中已經包含該Key,則替換該Key所對 應的Value,返回值為該Key原來所對應的Value,若沒有則返回null
V get(Object key) 返回與參數Key所對應的Value對象,如果不存在則返回null
boolean containsKey(Object key) 判斷集合中是否包含指定的Key
boolean containsValue (Object value) 判斷集合中是否包含指定的Value
V remove(Object key) 根據參數指定的key進行刪除
Set keySet() 返回此映射中包含的鍵的Set視圖
Collection values() 返回此映射中包含的值的Set視圖
Set<Map.Entry<K,V>> entrySet() 返回此映射中包含的映射的Set視圖

3.8.3 HashMap集合的原理

  • 使用元素的key調用hashCode方法獲取對應的哈希碼值,再由某種哈希算法計算在數組中的索引位置。
  • 若該位置沒有元素,則將該鍵值對直接放入即可。
  • 若該位置有元素,則使用key與已有元素依次比較哈希值,若哈希值不相同,則將該元素直接放入。
  • 若key與已有元素的哈希值相同,則使用key調用equals方法與已有元素依次比較。
  • 若相等則將對應的value修改,否則將鍵值對直接放入即可。

3.8.4 相關常量

  • DEFAULT_INITIAL_CAPACITY : HashMap的默認容量是16。
  • DEFAULT_LOAD_FACTOR:HashMap的默認加載因子是0.75。
  • threshold:擴容的臨界值,該數值為:容量*填充因子,也就是12。
  • TREEIFY_THRESHOLD:若Bucket中鏈表長度大於該默認值則轉化為紅黑樹存儲,該數值是8。
  • MIN_TREEIFY_CAPACITY:桶中的Node被樹化時最小的hash表容量,該數值是64。

3.9 Collections類

3.9.1常用方法

static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll) 根據元素的自然順序返回給定集 合的最大元素
static T max(Collection<? extends T> coll,Comparator<? super T> comp) 根據指定比較器引發的順序返回 給定集合的最大元素
static<T extends Object & Comparable<? super T>> T min(Collection<? extends T>coll) 根據元素的自然順序返回給定集 合的最小元素
static T min(Collection<? extends T>coll,Comparator<? super T>comp) 根據指定比較器引發的順序返回 給定集合的最小元素
static void copy(List<? super T> dest,List<? extends T> src) 將一個列表中的所有元素復制到 另一個列表中
static void reverse(List<?> list) 反轉指定列表中元素的順序
static void shuffle(List<?> list) 使用默認的隨機源隨機置換指定的列表
static <T extends Comparable<? super T>> void sort(List list) 根據其元素的自然順序將指定列表按升 序排序
static void sort (List list,Comparator<? super T> c) 根據指定比較器指定的順序對指定列表 進行排序
static void swap(List<?>list,int i,int j ) 交換指定列表中指定位置的元素


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM