最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Map/IO流

2022-07-31 10:31 作者:劍離我離  | 我要投稿

Map

HashMap:作為Map的主要實(shí)現(xiàn)類,效率高,可以存儲null;數(shù)組+鏈表(1.7以前) 數(shù)組+鏈表+紅黑樹(1.8)

LinkedHashMap:保證遍歷map元素時(shí),可以按照添加的順序?qū)崿F(xiàn)遍歷。

原因:在原有map的基礎(chǔ)上,添加了一對指針,指向前一個(gè)和后一個(gè)。

TreeMap:保證按照添加的K-V對進(jìn)行排序,實(shí)現(xiàn)排序遍歷。此時(shí)使用key進(jìn)行排序。

底層使用紅黑樹。

Hashtable:作為古老的實(shí)現(xiàn)類;線程安全,效率低;不能存儲null的key和value

Properties:常用來處理配置文件

Map中的

key:無序的、不可重復(fù)的,使用Set存儲所有的entry; ---> key所在類需要重寫equals()和HashCode();

value:無序的,可重復(fù)的,使用Collection存儲所有的value; 需要重寫equals()方法;

一個(gè)鍵值對:構(gòu)成一個(gè)Entry對象

Map中的entry:無序的、不可重復(fù)的,使用Set存儲所有的entry

源碼分析(HashMap)

jdk7

  • 在實(shí)例化以后,底層創(chuàng)建了長度是16的一維數(shù)組 Entry[] table ;

  • map.put(key1,value1);

  • 首先調(diào)用key1所在類的hashCode()計(jì)算key1哈希值,此哈希值經(jīng)過某種算法計(jì)算以后,得到在Entry數(shù)組中的存放位置。如果此位置上的數(shù)據(jù)為空,此時(shí)的key1-value1添加成功

  • 如果此位置上的數(shù)據(jù)不為空,比較key1和已經(jīng)存在的一個(gè)或多個(gè)數(shù)組的哈希值:如果key1的哈希值與已經(jīng)存在的數(shù)組的哈希值都不相同,此時(shí)key1-value1添加成功;如果存在相同的,繼續(xù)比較:調(diào)用key1所在類的equals()方法;如果false,添加成功;如果true,使用value1替換value2;

  • 默認(rèn)的擴(kuò)容方式;擴(kuò)容為原來容量的2倍,并將原有的數(shù)據(jù)復(fù)制過來。擴(kuò)容的時(shí)候,會重新算一次hash值。

  • 默認(rèn)加載因子:0.75;當(dāng)添加的時(shí)候達(dá)到了0.75,但新的key對應(yīng)沒有形成鏈表,也是直接加進(jìn)去的。

jdk8

  • new HashMap(); 底層沒有創(chuàng)建一個(gè)長度為16的Node[] 數(shù)組

  • 首次調(diào)用put方法時(shí),底層創(chuàng)建長度為16的數(shù)組

  • 當(dāng)數(shù)組的某一個(gè)索引位置上的元素以鏈表形式存在的數(shù)據(jù)個(gè)數(shù) >8 且當(dāng)前數(shù)組的長度 > 64時(shí),此時(shí)此索引位置上的所有數(shù)據(jù)改為使用紅黑樹存儲。

需要關(guān)心的幾個(gè)值

  • DEFAULT_INITIAL_CAPACITY: HashMap 的默認(rèn)容量 :16

  • DEFAULT_LOAD_FACTOR: HashMap 的默認(rèn)加載因子 : 0.75

  • threshold: 擴(kuò)容的臨界值 = 容量*填充因子

  • TREEIFY_THRESHOLD:Bucket 中鏈表長度大于該默認(rèn)值,轉(zhuǎn)化為紅黑樹:8

  • MIN_TREEIFY_CAPACITY: 桶中的Node被樹化時(shí)最小的hash表容量:64

LinkedHashMap的底層實(shí)現(xiàn)原理:

繼承于HashMap ,區(qū)別:其內(nèi)部提供了Entry,替換HashMap中的Node

Collections

  • reverse();// 反轉(zhuǎn)list

  • shuffle();// 隨機(jī)排序

  • 如果程序要求線程安全,可以使用Collections將ArrayList和Map轉(zhuǎn)化為線程安全的

泛型

在指明完以后,在接口類或接口中凡是定義類或接口時(shí),內(nèi)部結(jié)構(gòu)(比如:方法、構(gòu)造器、屬性),在實(shí)例化以后,都會變成具體的泛型類型。比如 add(E e) -- > 實(shí)例化以后: add(Integer e) ;

泛型的類型必須是類,不能是基本數(shù)據(jù)類型。需要用到基本數(shù)據(jù)類型的位置,需要使用包裝類來替換。

自定義泛型

泛型類、泛型接口

如果子類在繼承帶泛型的父類時(shí),指明了泛型類型,則實(shí)例化子類對象時(shí),不需要指明泛型。

泛型類可能有多個(gè)參數(shù);

構(gòu)造器是不帶泛型的:public GenericClass(){};

在編譯的時(shí)候,只會有一個(gè)ArrayList被加載到JVM中,即使是有兩種不同泛型的ArrayList

泛型的不同引用不能相互賦值。

在靜態(tài)結(jié)構(gòu)中不嫩更實(shí)用類的泛型。類的泛型是在實(shí)例化的時(shí)候才有。

異常類不能聲明為泛型類

泛型方法

在方法中出現(xiàn)了泛型結(jié)構(gòu),泛型參數(shù)與類的泛型參數(shù)沒有任何關(guān)系。泛型方法所屬的類是不是泛型類都沒有關(guān)系

泛型方法,可以聲明為靜態(tài)的。原因:泛型參數(shù)是在調(diào)用方法時(shí)確定的。并非在實(shí)例化類時(shí)確定。

在繼承關(guān)系的體現(xiàn)

類A是類B的父類,但在泛型中是屬于并列的結(jié)構(gòu)。

補(bǔ)充:類A是類B的父類,A<G> 是 B<G>的父類

通配符

<?>

添加:對于List<?>就不能向其內(nèi)部添加數(shù)據(jù)

獲?。涸试S讀取數(shù)據(jù),讀取的數(shù)據(jù)類型為Object

有限制條件的通配符的使用:

IO流

file

三個(gè)構(gòu)造器

獲取功能

按操作數(shù)據(jù)單位不同分為:字節(jié)流(8 bit),字符流(16 bit)

按流角色的不同分為:節(jié)點(diǎn)流,處理流

new FileWriter(String pathname,boolean append); // true 追加 false 覆蓋

對于文本文件,使用字符流處理;對于非文本文件,使用字節(jié)流處理。

關(guān)閉流:關(guān)閉外層流的同時(shí),內(nèi)層流也會被關(guān)閉

轉(zhuǎn)換流

  1. 轉(zhuǎn)換流:屬于字符流

InputStreamReader : ?將一個(gè)字節(jié)的輸入流轉(zhuǎn)換為字符的輸入流

OutputStreamWriter : 將一個(gè)字符的輸出流轉(zhuǎn)化為字節(jié)的輸出流

  1. 作用:提供字節(jié)流與字符流之間的轉(zhuǎn)換

  2. 解碼:字節(jié)、字節(jié)數(shù)組 --> 字符數(shù)組、字符串

編碼:字符數(shù)組、字符串 --> 字節(jié)、字節(jié)數(shù)組


Map/IO流的評論 (共 條)

分享到微博請遵守國家法律
宜兴市| 灵宝市| 昌吉市| 东乡县| 凤凰县| 灵寿县| 固阳县| 赤壁市| 巴楚县| 伊春市| 南溪县| 上犹县| 陆川县| 永登县| 西乌珠穆沁旗| 伊川县| 来宾市| 沙湾县| 太仆寺旗| 沂源县| 定西市| 石泉县| 苗栗县| 宣武区| 宁城县| 广昌县| 阳朔县| 上高县| 新邵县| 桂阳县| 德阳市| 德庆县| 正安县| 红安县| 芦溪县| 海盐县| 扎赉特旗| 南通市| 长阳| 稻城县| 余干县|