標籤:java 使用 io 檔案 資料 問題 演算法 new
我需要把星期天看的一些東西記錄下來,要不然會忘記。
hashCode、equals:
1)每個java對象都有hashCode和equals方法。
java的終極類是object類,那麼object類是如何來標註自己呢,就是object這個類是如何來區分對方。就是使用它們的hashcode和equals來推斷。
(hashcode是通過hash演算法實現的)
2)JVM每new一個object,都會講Object丟到一個Hash(雜湊表)裡去,這樣下次比較或者擷取這個對象的時候就可以根據對象的hashcode去這個表來取,可以提高效率。
我們必須知道java是有記憶體限制的,所以理論上是不可以無限次new的。
先比較hashcode,如果這個鏈表上還有其他資料就用equals。
我們可能會問,那直接使用equals不就得,當然,這是可以的。但是我們要看到hashcode的效率問題,hashcode主要的用途就是減少每次調用equals。
3)關於重寫Hashcode和equals的問題:
一般情況下,我們是不需要重寫這兩個函數的。想Integer Double這類的對象,java已經為我們重寫了這兩個函數,這也是為什麼只要兩個字串內容一樣他們的equals就是一樣的,按道理不應該,因為equals比較的是對象的引用。
需要重寫的情況:就是當我們使用map裡面的hashmap這類東西的時候,如果我們用自訂類作為索引值就必須重寫,否則會找不到類。因為類是繼承object的,會使用object的hashcode
所以兩個值一樣的資料,在這裡面就會變成兩個數。
就是使用自訂的key,才需要重寫。
I/O:
File類:可以是檔案,也可以是檔案目錄。通過File類我們可以擷取檔案的一定屬性。
流:這個反正就是一系列資料,我也說不清。
java的輸入輸出:(1)字元輸出、輸入資料流(Writer、Reader)(2)位元組輸出、輸入資料流。 (InputStream、OutPutStream)
(好像還有stdIO)
區別
(1)讀寫單位不同
位元組流以位元組(8bit)為單位,字元流以字元為單位,每次讀取的位元組就要看採用的字元對應表了。
(2)處理對象不同
位元組流可以處理所有類型對象(圖片,視頻,文本。。。)
字元流只能是字元類型
注意:位元組流是無法直接轉換為字元輸出的,因為讀取的單位不同,可以將數組位元組轉換為string了在輸出。。