本質 | 類型參數化,做用就是將類型轉換問題從運行時轉移到編譯期 |
語法 | 1 定義在類上 class ClassName<T>{} 2 定義在方法上 <T> void methodName(T t){} 3 通配符 <?> 可限制傳入參數,但沒法使用 泛型參數 需類型轉換 4 上限 <? extends T > 接受 T及任意子類 5 下限 <? super T> 接受 T及任意父類 |
存放數據的集合,JAVA中實現Collection和Map的都是集合java
Vector:線程安全,基於動態數組,增加率爲100%,ArrayList爲50%
ArrayList:基於動態數組,查詢快,增刪慢。
LinkedList:基於鏈表,增刪快,查詢滿。算法
PS : Hash散列算法 hash & (length-1) 經過Hash散列算法獲取下標,HashCode衝突且equals爲false時存入鏈表。當length爲2的N次方時,能夠最大程度減少HashCode衝突。數組
HashSet:底層由HashMap實現,容許null,惟一,無序
LinkedHashSet:底層由LinkedHashMap實現(適配器模式),不容許null,惟一,按插入順序排序
TreeSet:底層由TreeMap實現,不容許null,惟一,按排序規則排序緩存
映射集合(鍵值對)
HashMap:基於Hash散列算法,鍵惟一,容許null,無序
LinkedHashMap:繼承HashMap,鍵惟一,不容許null,按插入順序排序
TreeMap:鍵惟一,不容許null,按排序規則排序,底層基於紅黑樹安全
HashTable:線程安全
ConcurrentHashMap:線程安全,鎖分離多線程
本質 | 數據傳輸 | ||
分類 | 數據類型 | 字節流 字符流 |
|
數據流向 | 輸入流 輸出流 |
||
輸入流 | 字節流 | InputStream | 字節輸入流接口 |
ByteArrayInputStream | 字節數組輸入流 | ||
FileInputStream | 文件輸入流 | ||
BufferedInputStream | 高級流 緩存輸入流 | ||
字符流 | Reader | 字符輸入流接口 | |
InputStreamReader | 轉換流 字符輸入流 可指定字符集 | ||
BufferedReader | 高級流 緩存字符輸入流 | ||
輸出流 | 字節流 | outputStream | 字節輸出流接口 |
ByteArrayOutputStream | 字節數組輸出流 | ||
FileOutputStream | 文件輸出流 | ||
BufferedOutputStream | 高級流 緩存輸出流 | ||
字符流 | Writer | 字符輸出流接口 | |
OutputStreamWriter | 轉換流 字符輸出流 可指定字符集 | ||
BufferedWriter | 高級流 緩存字符輸出流 | ||
PrintWriter | 高級流 緩存字符輸出流 自動行刷新 |
多線程 | 併發,合理使用能夠提升效率,CPU給每一個線程分配時間片(幾十ms),線程有建立與上下文切換的開銷 | |
線程狀態 | 新建 NEW 就緒 RUNNABLE 運行 RUNNING 阻塞 BLOCKED 死亡 DEAD |
|
建立線程 | 1 繼承Thread 2 實現Runnalbe接口 3 實現Callable接口 |
|
線程池 | ![]() |
|
線程併發 | 三大特性 | 原子性 有序性 可見性 |
同步方案 | 1 volatile 類型修飾符 保證可見性 2 Synchronized 同步代碼塊,可修飾方法 代碼塊 3 ReentrantLock 顯示獲取/釋放鎖 |
|
線程操做 | 1 sleep() 使線程進入阻塞,可指定毫秒值,不釋放鎖 2 wait()/notify()/notifyAll() 等待(阻塞)喚醒(就緒)機制,可指定毫秒值,釋放鎖 3 yield() 使線程進入就緒,不釋放鎖 4 join() 當前線程進入阻塞,直到join線程執行結束,進入就緒,釋放鎖 |
反射 | 反射(Reflection)是Java 程序開發語言的特徵之一,它容許運行中的 Java 程序獲取自身的信息,而且能夠操做類或對象的內部屬性。 | ||
主要功能 | 1 在運行時判斷一個對象所屬的類 2 在運行時構造任意一個類的對象 3 在運行時判斷任意一個類所具備的成員變量和方法(經過反射甚至能夠調用private方法) 4 在運行時調用任意一個對象的方法 |
||
語法 | 注意: 調用私有屬性時,需setAccessible(True)跳過java語言訪問檢查,不然拋出IllegalAccessException | ||
獲取Class | 1 Class.forName(className) 2 類名.class 3 對象.getClass() |
||
對象 | 無參構造器 | newInstance() 調用無參構造器建立對象並返回 未定義無參構造器時,拋出InstantiationException |
|
獲取構造器 | 1 getConstructor([types]) 獲取指定參數類型列表的公有構造器 2 getConstructors() 獲取全部公有構造器 3 getDeclaredConstructor([types]) 獲取指定參數類型列表的構造器 4 getDeclaredConstructors() 獲取全部構造器 |
||
調用構造器 | 構造器對象.newInstance([params]) 建立對象,調用私有構造器時, 請注意 | ||
方法 | 獲取方法 | 1 getMethod(name[,types]) 獲取指定方法名,參數類型列表的公有方法 2 getMethonds() 獲取全部公有方法,包括繼承類的公有方法 3 getDeclaredMethod(name[,types]) 獲取指定方法名,參數類型列表的方法,但不包括繼承方法 4 getDeclaredMethods() 獲取全部方法,但不包括繼承方法 |
|
調用方法 | 方法對象.invoke(obj[,params]) 調用指定對象方法,調用私有方法時, 請注意 | ||
字段 | 獲取字段 | 1 getField(name) 獲取指定字段名的公有字段 2 getFields() 獲取全部公有字段,包括繼承類的公有方法 3 getDeclaredField(name) 獲取指定字段名的字段,但不包括繼承字段 4 getDeclaredFields() 獲取全部字段,但不包括繼承字段 |
|
操做字段 | 字段對象.set(obj,val) 設置指定對象字段屬性 字段對象.get(obj) 獲取指定對象字段屬性 操做私有字段時,請注意 |