建立三個String對象,以下圖所示html
hashCode():是根據內存地址按hash算法得出的一個正數java
若equals()爲true,hashCode()也爲true
若hashCode()爲true,equals()不必定爲true,由於可能存在hash衝突(機率較低)算法
以HashSet爲例確保添加的元素是不重複的:編程
若是在存儲的時候逐個equals()比較,效率較低,哈希算法提升了去重複的效率,下降了使用equals()方法的次數設計模式
boolean equals(Object obj) boolean equalsIgnoreCase(String str) boolean isEmpty() boolean contains(String str) boolean startsWith(String str) boolean endsWith(String str)
int length() char charAt(int index) int indexOf(int ch) int indexOf(String str) int indexOf(int ch,int fromIndex) int indexOf(String str,int fromIndex) String substring(int start) String substring(int start,int end)
byte[] getBytes() char[] toCharArray() static String valueOf(char[] chs) static String valueOf(int i) String toLowerCase() String toUpperCase() String concat(String str)
String replace(char old,char new) String replace(String old,String new)
String trim()
int compareTo(String str) int compareToIgnoreCase(String str)
表示該類不能被繼承,請謹慎使用,若非該類已十分明確不會被繼承或出於安全方面考慮,並不建議設計爲final類安全
表示該方法不能被子類重寫(覆蓋),但可以被重載,即在子類中能夠建立多個與final方法方法名相同,但參數不一樣的方法
注意若父類中final方法的訪問修飾符爲private,那麼子類是不會直接繼承父類的final方法的,那麼這時在子類中建立相同的方法名與參數是不會有final衝突的服務器
final修飾變量是較爲常見的,也是這裏須要重點學習的部分
final修飾變量表示該變量僅能被賦值一次,賦值後值再也不改變架構
處理流:在字節流的基礎上進行了功能的擴展或增強,又分爲如下兩種併發
擴展:關於緩衝流,這裏涉及到了設計模式中的裝飾者模式,其做用即基於已有功能基礎上,提供加強的功能異步
其實現思路以下:
先結合生活場景簡單介紹下同步、異步、阻塞、非阻塞,以銀行取款爲例:
同步且阻塞,服務器實現模式爲一個鏈接一個線程,即客戶端有鏈接請求時服務器端就須要啓動一個線程進行處理,若是這個鏈接不作任何事情會形成沒必要要的線程開銷,固然能夠經過線程池機制改善
BIO方式適用於鏈接數目比較小且固定的架構,這種方式對服務器資源要求比較高,併發侷限於應用中,JDK1.4之前的惟一選擇,但程序直觀簡單易理解
同步非阻塞,服務器實現模式爲一個請求一個線程,即客戶端發送的鏈接請求都會註冊到多路複用器上,多路複用器輪詢到鏈接有I/O請求時才啓動一個線程進行處理
NIO方式適用於鏈接數目多且鏈接比較短(輕操做)的架構,好比聊天服務器,併發侷限於應用中,編程比較複雜,JDK1.4開始支持
異步非阻塞,服務器實現模式爲一個有效請求一個線程,客戶端的I/O請求都是由OS先完成了再通知服務器應用去啓動線程進行處理
AIO方式使用於鏈接數目多且鏈接比較長(重操做)的架構,好比相冊服務器,充分調用OS參與併發操做,編程比較複雜,JDK7開始支持
擴展:Netty爲何使用NIO而不是AIO?
Netty不看重Windows上的使用,在Linux系統上,AIO的底層實現仍使用EPOLL,沒有很好實現AIO,所以在性能上沒有明顯的優點,並且被JDK封裝了一層不容易深度優化
Files.read() 讀取文件 Files.write() 寫入文件 Files.exists() 檢測文件路徑是否存在 Files.createFile() 建立文件 Files.createDirectory() 建立文件夾 Files.delete() 刪除文件或者目錄 Files.copy() 複製文件 Files.move() 移動文件 Files.size() 查看文件個數