目錄
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 ) | 交換指定列表中指定位置的元素 |