集合

--------| Collection 接口,集合的總接口

List 有序 可重復(fù)
Set 無(wú)序 不可重復(fù)

----| List接口中【特有的方法】:
添加:
add(index, Object o); //在指定位置上放入元素
addAll(int index, Collection c); //在指定位置上添加一個(gè)集合

獲取:
    Object get(int index); //獲取指定下標(biāo)的元素
    int indexOf(Object o); //獲取某個(gè)元素的下標(biāo)位置
    int lastIndexOf(Object o); //找出指定元素最后一次出現(xiàn)在集合中的位置
    List subList(int fromIndex, int toIndex); //獲取子List集合

修改:
    set(int index, Object o); //設(shè)置指定下標(biāo)上的元素

迭代:
    ListIterator();

ListIterator()
List特有的迭代器

hasNext();
next();
remove();

add(Object o); //在當(dāng)前迭代器指向的位置上尖飞,添加元素文捶,其他元素向后移動(dòng)
set(Object o); //替換next獲取到的元素
nextIndex(); //下一個(gè)元素的下標(biāo)

/*
List集合的三種遍歷方式

  1. for循環(huán)
  2. 迭代器
  3. 增強(qiáng)for循環(huán) 非常常用
    */

--------------------------------------------------------------- List集合----------------------------------------------------------

--------| List集合

List 接口 有序 可重復(fù)
ArrayList 【重點(diǎn)】

ArrayList是底層維護(hù)了一個(gè)Object類型的數(shù)組,這樣的話這個(gè)ArrayList既可以保存任意類型的數(shù)據(jù)
特征:
當(dāng)調(diào)用無(wú)參構(gòu)造方法ArrayList,這里創(chuàng)建的底層Object類型的數(shù)組元素個(gè)數(shù)默認(rèn)為10
DEFAULT_CAPACITY 10

    查詢快道伟,增刪慢
開發(fā)中使用ArrayList比較多的情景:
    圖書館迹缀,人員管理

----| ArrayList特有方法:

ensureCapacity(int minCapacity); 不常用
判斷當(dāng)前ArrayList里面保存元素內(nèi)容Object數(shù)組,元素個(gè)數(shù)是否大于minCapacity

trimToSize(); 不太常用
截?cái)嗟讓泳S護(hù)的Object類型的數(shù)組蜜徽,讓數(shù)組容量變成當(dāng)前ArrayList的size值【有效元素個(gè)數(shù)】
size();

查詢快祝懂, 增刪慢的原理:
查詢快:
    ArrayList底層維護(hù)是一個(gè)Object類型的數(shù)組,可以完成使用數(shù)組的下標(biāo)機(jī)制來(lái)訪問數(shù)據(jù)拘鞋,這
    種訪問形式是非逞馀睿快的
        
增加慢:
    是因?yàn)樵谔砑訑?shù)據(jù)的時(shí)候,有可能導(dǎo)致ArrayList底層的Object數(shù)組的元素個(gè)數(shù)不夠用盆色,那么會(huì)
    調(diào)用數(shù)組的擴(kuò)容方法 grow灰蛙,而擴(kuò)容方法,是創(chuàng)建了一個(gè)新的數(shù)組隔躲,數(shù)組的元素個(gè)數(shù)大于是老數(shù)組的
    1.5倍摩梧,這里會(huì)利用一些方法,把老數(shù)組里面的元素完完整整的拷貝的到新數(shù)組宣旱,這個(gè)拷貝過(guò)程很占
    用時(shí)間和內(nèi)存
        
刪除慢:
    因?yàn)閯h除某一個(gè)元素仅父,會(huì)導(dǎo)致數(shù)組中該元素之后的數(shù)據(jù),做一個(gè)整體的左移浑吟,這里也是一個(gè)數(shù)組的拷
    貝過(guò)程笙纤,整個(gè)過(guò)程非常浪費(fèi)時(shí)間



面試題:
    1. 如果調(diào)用了ArrayList的無(wú)參構(gòu)造方法,那么請(qǐng)問底層維護(hù)的Object數(shù)組默認(rèn)的元素個(gè)數(shù)是多少组力?
    如果是調(diào)用這個(gè)方法呢 new ArrayList(8);
    答:默認(rèn)元素個(gè)數(shù)為10 省容,如果調(diào)用了new ArrayList(8) Object數(shù)組,元素個(gè)數(shù)為8
    
    2. ArrayList是一個(gè)可以自增長(zhǎng)的空間燎字,請(qǐng)問腥椒,增長(zhǎng)的原理是什么阿宅?增長(zhǎng)的長(zhǎng)度是多少?
        ArrayList底層維護(hù)的是一個(gè)Object數(shù)組寞酿,默認(rèn)元素為10家夺,如果添加元素時(shí),當(dāng)前需求的元素空
        間超出了Object數(shù)組的元素個(gè)數(shù)伐弹,會(huì)調(diào)用底層的grow猖毫,進(jìn)行數(shù)組元素的擴(kuò)容和拷貝
        擴(kuò)容量是大約1.5倍
            新元素個(gè)數(shù) = 老元素個(gè)數(shù) + (老元素個(gè)數(shù) >> 1);
            newCapacity = oldCapacity + (olcCapacity >> 1);  

----|LinkedList特有方法:
底層維護(hù)的是一個(gè)鏈表

addFirst(Object o);
addLast(Object o);
getFirst();
getLast();

removeFirst();
removeLast();

--------------------------------------------------------------Set------------------------------------------------------------------

--------| Set 接口 無(wú)序 不可重復(fù)

HashSet 底層維護(hù)是一個(gè)【哈希表】,存儲(chǔ)效率很高1感臁6T摹回论!
TreeSet

比較器:
Comparable接口 實(shí)現(xiàn)compareTo方法
Comparator接口 實(shí)現(xiàn)compare方法

發(fā)現(xiàn):
1. 添加元素的時(shí)候傀蓉,每一次都會(huì)調(diào)用hashCode方法
2. 重寫equals方法和HashCode方法葬燎,也是首先調(diào)用hashCode方法缚甩,再來(lái)調(diào)用equals方法

----| HashSet存儲(chǔ)原理:【背下來(lái)I猛!浩蓉!】
向HashSet集合中添加元素,HashSet首先會(huì)調(diào)用該元素hashCode方法驾窟,獲取該對(duì)象的Hash值
通過(guò)【移位】運(yùn)算绅络,計(jì)算出嘁字,該元素應(yīng)該保存在【哈希表】中哪一個(gè)位置

情況1:
    該位置沒有任何元素纪蜒,直接放入

情況2:
    該位置存在其他元素纯续,哈希表就會(huì)調(diào)用該元素的equals方法猬错,和已經(jīng)保存在哈希表里面的元素進(jìn)行
    比較
    如果比較結(jié)果為true 表示相同元素茸歧,無(wú)法添加
    如果比較結(jié)果為false软瞎,表示為不同元素,可以添加

哈希表的每一個(gè)單元格都是一個(gè)桶式結(jié)構(gòu)鳖藕,可以保存多個(gè)元素吊奢,允許元素共存R彻觥F毯恰!


TreeSet是一個(gè)樹形結(jié)構(gòu)的Set結(jié)構(gòu) 
因?yàn)門reeSet是一個(gè)樹形結(jié)構(gòu)幻林,所有的元素都需要進(jìn)行比較之后才可以放入到Set集合中沪饺,而
    字符串和自定義類對(duì)象是沒有比較的方式和方法的
    
    【要求】在TreeSet里面的所有的元素都要有【比較的方式】或者有【自然順序】

----------------------------------------------------------Map-----------------------------------------------------------------------

--------| Map<K, V> 雙列集合整葡,這是一個(gè)接口

HashMap
TreeMap

K:Key 鍵 !!! 唯一值!!! 不允許重復(fù)!!!
V:Value 值 一個(gè)鍵(Key)對(duì)應(yīng)一個(gè)值(Value) 可以重復(fù)的
    
在Map<K, V> 雙列集合中,保存的只能是一個(gè)鍵(Key)值(Value)對(duì)T饩印!端壳!
    
    
Map中要學(xué)習(xí)的方法:
    增
        put(K key, V value); 添加一個(gè)鍵(Key)值(Value)對(duì)
        putAll(Map<? extends K, ? extends V> map);
        添加一個(gè)符合數(shù)據(jù)類型的Map雙列集合
    刪
        clear(); 清空所有的鍵(Key)值(Value)對(duì)
        remove(Object key); 根據(jù)Key刪除對(duì)應(yīng)的鍵(Key)值(Value)對(duì)
    改
        put(K key, V value); 當(dāng)鍵(Key)存在時(shí)损谦,這個(gè)操作是重新修改值(Value)
    查    
        size(); 獲取鍵值對(duì)個(gè)數(shù)
        get(Object key); 通過(guò)鍵(Key)找出對(duì)應(yīng)的值(Value)
        containsKey(Object key); 查看這個(gè)Key是否在Map中存在
        containsValue(Object value); 查看這個(gè)Value是否在Map存在
            
        keySet(); 返回所有鍵(Key)Set集合
        values(); 返回所有值(Value)Collection集合

----| HashMap 實(shí)現(xiàn)類

 這里把鍵值對(duì)成翩,認(rèn)為是一個(gè)對(duì)象赦役,組成一個(gè)類,稱之為Entry
    
     class Entry<K, V> {
        K key;
        V value;
     } 
     這里可以認(rèn)為在Map集合中术羔,保存的每一個(gè)鍵值對(duì)都是一個(gè)Entry對(duì)象级历,把這些Entry對(duì)象獲取出來(lái)叭披,
     做成一個(gè)集合涩蜘,進(jìn)行遍歷
     entrySet();
     Map.Entry
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市粤策,隨后出現(xiàn)的幾起案子叮盘,更是在濱河造成了極大的恐慌霹俺,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)北苟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門友鼻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)闺骚,“玉大人僻爽,你說(shuō)我怎么就攤上這事《嘏酰” “怎么了碰镜?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵秽荤,是天一觀的道長(zhǎng)窃款。 經(jīng)常有香客問我,道長(zhǎng)雁乡,這世上最難降的妖魔是什么踱稍? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任珠月,我火速辦了婚禮楔敌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘庆聘。我一直安慰自己,他們只是感情好象对,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布勒魔。 她就那樣靜靜地躺著菇曲,像睡著了一般常潮。 火紅的嫁衣襯著肌膚如雪蕊玷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天延届,我揣著相機(jī)與錄音方庭,去河邊找鬼酱固。 笑死运悲,一個(gè)胖子當(dāng)著我的面吹牛班眯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宠能,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼违崇,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼渣淳!你這毒婦竟也來(lái)了伴箩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤泥张,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后渗钉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鳄橘,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年芒炼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瘫怜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡本刽,死狀恐怖鲸湃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情子寓,我是刑警寧澤暗挑,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站斜友,受9級(jí)特大地震影響炸裆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鲜屏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一烹看、第九天 我趴在偏房一處隱蔽的房頂上張望墙歪。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)律适。三九已至捂贿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背汽纤。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工背传, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赞赖。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓匿垄,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親变丧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子滴劲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Collection接口 Collection接口是所有集合的祖先類萧芙。他有兩個(gè)構(gòu)造方法包帚,一個(gè)無(wú)參構(gòu)造,一個(gè)是帶Co...
    夜幕繁華閱讀 583評(píng)論 0 0
  • Collection ├List │├LinkedList │├ArrayList │└Vector │└Stac...
    AndyZX閱讀 869評(píng)論 0 1
  • 3.3 集合 一方面产镐, 面向?qū)ο笳Z(yǔ)言對(duì)事物的體現(xiàn)都是以對(duì)象的形式,為了方便對(duì)多個(gè)對(duì)象的操作,就要對(duì)對(duì)象進(jìn)行存儲(chǔ)。另...
    閆子揚(yáng)閱讀 717評(píng)論 0 1
  • 以下是《瘋狂Java講義》中的一些知識(shí)蟆技,如有錯(cuò)誤,煩請(qǐng)指正眶蕉。 集合概述 Java集合可以分為Set、List、Ma...
    hainingwyx閱讀 531評(píng)論 0 1
  • flask-uploads 是封裝的 flask里的文件上傳功能,此處以實(shí)現(xiàn)用戶頭像上傳為例 官方文檔介紹:點(diǎn)我 ...
    寶寶家的隔壁老王閱讀 22,839評(píng)論 2 14