1.Map()重寫equal同時(shí)重寫hashCode()方法
? Object類中的equal()和==是相同的 String中的equal只比較值
? HashCode()是根據(jù)Object內(nèi)存地址計(jì)算的
? 如果兩個(gè)對象通過調(diào)用equals方法是相等的棵介,那么這兩個(gè)對象調(diào)用hashCode方法必須返回相同的整數(shù)擎颖。
? 重寫equal
2.遍歷Map
? 1)keySet values 只需要map的key或者values
? 2)keySet get? ? 先獲取key 然后根據(jù)key的get(key)
? 3)entrySet? ? ? entry.getKey() entry.getVlue()
? 都可以用iterator代替for
? 4)lambda? map.forEach((key, value) -> {
? ? ? System.out.println(key + ":" + value);
? ? }); 性能低于entrySet
? ? 如果只是獲取key羞反,或者value科吭,推薦使用keySet或者values方式
? ? 如果同時(shí)需要key和value推薦使用entrySet
? ? 如果需要在遍歷過程中刪除元素推薦使用Iterator
? ? 如果需要在遍歷過程中增加元素,可以新建一個(gè)臨時(shí)map存放新增的元素浑此,等遍歷完? ? 畢累颂,再把臨時(shí)map放到原來的map中
3.單例
? 1)懶漢 線程不安全
? ? public class Singleton {?
? ? private static Singleton instance;?
? ? private Singleton (){}?
? ? public static Singleton getInstance() {?
? ? if (instance == null) {?
? ? ? ? instance = new Singleton();?
? ? }?
? ? return instance;?
? ? }?
}?
? 2)懶漢 線程安全
? ? ? ? public class Singleton {?
? ? private static Singleton instance;?
? ? private Singleton (){}?
? ? public static synchronized Singleton getInstance() {?
? ? if (instance == null) {?
? ? ? ? instance = new Singleton();?
? ? }?
? ? return instance;?
? ? }?
}
? 3)餓漢
? ? public class Singleton {?
? ? private static Singleton instance = new Singleton();?
? ? private Singleton (){}?
? ? public static Singleton getInstance() {?
? ? return instance;?
? ? }?
}?
? 4)雙檢鎖
? public class Singleton {?
? ? private volatile static Singleton singleton;?
? ? private Singleton (){}?
? ? public static Singleton getSingleton() {?
? ? if (singleton == null) {?
? ? ? ? synchronized (Singleton.class) {?
? ? ? ? if (singleton == null) {?
? ? ? ? ? ? singleton = new Singleton();?
? ? ? ? }?
? ? ? ? }?
? ? }?
? ? return singleton;?
? ? }?
}
4.IO流
? 字節(jié)流FileInputStream 從文件讀取數(shù)據(jù)
? ? ? ? FileOutputStream
? 字符流FileReader
? ? ? ? FileWriter
? ? ? ? 字符流:
? Reader:用于讀取字符流的抽象類。
? ? ? |---BufferedReader:從字符輸入流中讀取文本凛俱,緩沖各個(gè)字符紊馏,從而實(shí)現(xiàn)字符、數(shù)組和行的高效讀取蒲犬。 可以指定緩沖區(qū)的大小朱监,或者可使用默認(rèn)的大小。大 多數(shù)情況下原叮,默認(rèn)值就足夠大了赫编。
? ? ? ? ? ? |---LineNumberReader:跟蹤行號的緩沖字符輸入流。此類定義了方法setLineNumber(int)和getLineNumbner()奋隶,它們可分別用于設(shè)置和獲取當(dāng)前行號擂送。
? ? ? ? |---InputStreamReader:是字節(jié)流通向字符流的橋梁:它使用指定的 charset 讀取字節(jié)并將其解碼為字符。它使用的字符集可以由名稱指定或顯式給定达布,或者可以接受平臺默認(rèn)的字符集团甲。
? ? ? ? ? ? |---FileReader:用來讀取字符文件的便捷類。此類的構(gòu)造方法假定默認(rèn)字符編碼和默認(rèn)字節(jié)緩沖區(qū)大小都是適當(dāng)?shù)氖蚰簟R约褐付ㄟ@些值,可以先在 FileInputStream 上構(gòu)造一個(gè) InputStreamReader身腻。
***************************************************************************
? Writer:寫入字符流的抽象類产还。
? ? ? ? |---BufferedWriter:將文本寫入字符輸出流,緩沖各個(gè)字符嘀趟,從而提供單個(gè)字符脐区、數(shù)組和字符串的高效寫入。
? ? ? ? |---OutputStreamWriter:是字符流通向字節(jié)流的橋梁:可使用指定的 charset 將要寫入流中的字符編碼成字節(jié)她按。它使用的字符集可以由名稱指定或顯式給定牛隅,否則將接受平臺默認(rèn)的字符集。
? ? ? ? ? ? |---FileWriter:用來寫入字符文件的便捷類酌泰。此類的構(gòu)造方法假定默認(rèn)字符編碼和默認(rèn)字節(jié)緩沖區(qū)大小都是可接受的媒佣。要自己指定這些值,可以先在 FileOutputStream 上構(gòu)造一個(gè) OutputStreamWriter陵刹。
****************************************************************************
? 字節(jié)流:
? InputStream:是表示字節(jié)輸入流的所有類的超類默伍。
? ? ? ? |--- FileInputStream:從文件系統(tǒng)中的某個(gè)文件中獲得輸入字節(jié)。哪些文件可用取決于主機(jī)環(huán)境。FileInputStream 用于讀取諸如圖像數(shù)據(jù)之類的原始字節(jié)流也糊。要讀取字符流炼蹦,請考慮使用 FileReader。
? ? ? ? |--- FilterInputStream:包含其他一些輸入流狸剃,它將這些流用作其基本數(shù)據(jù)源掐隐,它可以直接傳輸數(shù)據(jù)或提供一些額外的功能。
? ? ? ? ? ? |--- BufferedInputStream:該類實(shí)現(xiàn)緩沖的輸入流钞馁。
**************************************************************************
? OutputStream:此抽象類是表示輸出字節(jié)流的所有類的超類虑省。
? ? ? ? |--- FileOutputStream:文件輸出流是用于將數(shù)據(jù)寫入 File 或 FileDescriptor 的輸出流。
? ? ? ? |--- FilterOutputStream:此類是過濾輸出流的所有類的超類指攒。
? ? ? ? ? ? ? |--- BufferedOutputStream:該類實(shí)現(xiàn)緩沖的輸出流慷妙。
? ? 緩沖流(buffer):對文件或者其他目標(biāo)頻繁的操作,效率低允悦,性能差膝擂。? 使用緩沖流的好處是? ? ? ? ? 能夠更高效的讀寫信息,原理是現(xiàn)將數(shù)據(jù)緩沖起來隙弛,然后一起寫入或者讀取出來
? ? 轉(zhuǎn)換流:InputStreamReader是字節(jié)流通向字符流的橋梁
? ? ? ? ? OutputStreamWriter是字符流通向字節(jié)流的橋梁