集合

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

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

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

獲取:
    Object get(int index); //獲取指定下標(biāo)的元素
    int indexOf(Object o); //獲取某個元素的下標(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)前迭代器指向的位置上,添加元素,其他元素向后移動
set(Object o); //替換next獲取到的元素
nextIndex(); //下一個元素的下標(biāo)

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

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

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

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

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

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

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

----| ArrayList特有方法:

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

trimToSize(); 不太常用
截斷底層維護的Object類型的數(shù)組,讓數(shù)組容量變成當(dāng)前ArrayList的size值【有效元素個數(shù)】
size();

查詢快, 增刪慢的原理:
查詢快:
    ArrayList底層維護是一個Object類型的數(shù)組,可以完成使用數(shù)組的下標(biāo)機制來訪問數(shù)據(jù),這
    種訪問形式是非常快的
        
增加慢:
    是因為在添加數(shù)據(jù)的時候,有可能導(dǎo)致ArrayList底層的Object數(shù)組的元素個數(shù)不夠用,那么會
    調(diào)用數(shù)組的擴容方法 grow,而擴容方法,是創(chuàng)建了一個新的數(shù)組,數(shù)組的元素個數(shù)大于是老數(shù)組的
    1.5倍,這里會利用一些方法,把老數(shù)組里面的元素完完整整的拷貝的到新數(shù)組,這個拷貝過程很占
    用時間和內(nèi)存
        
刪除慢:
    因為刪除某一個元素,會導(dǎo)致數(shù)組中該元素之后的數(shù)據(jù),做一個整體的左移,這里也是一個數(shù)組的拷
    貝過程,整個過程非常浪費時間



面試題:
    1. 如果調(diào)用了ArrayList的無參構(gòu)造方法,那么請問底層維護的Object數(shù)組默認的元素個數(shù)是多少?
    如果是調(diào)用這個方法呢 new ArrayList(8);
    答:默認元素個數(shù)為10 ,如果調(diào)用了new ArrayList(8) Object數(shù)組,元素個數(shù)為8
    
    2. ArrayList是一個可以自增長的空間,請問,增長的原理是什么?增長的長度是多少?
        ArrayList底層維護的是一個Object數(shù)組,默認元素為10,如果添加元素時,當(dāng)前需求的元素空
        間超出了Object數(shù)組的元素個數(shù),會調(diào)用底層的grow,進行數(shù)組元素的擴容和拷貝
        擴容量是大約1.5倍
            新元素個數(shù) = 老元素個數(shù) + (老元素個數(shù) >> 1);
            newCapacity = oldCapacity + (olcCapacity >> 1);  

----|LinkedList特有方法:
底層維護的是一個鏈表

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

removeFirst();
removeLast();

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

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

HashSet 底層維護是一個【哈希表】,存儲效率很高!!!
TreeSet

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

發(fā)現(xiàn):
1. 添加元素的時候,每一次都會調(diào)用hashCode方法
2. 重寫equals方法和HashCode方法,也是首先調(diào)用hashCode方法,再來調(diào)用equals方法

----| HashSet存儲原理:【背下來!!!】
向HashSet集合中添加元素,HashSet首先會調(diào)用該元素hashCode方法,獲取該對象的Hash值
通過【移位】運算,計算出,該元素應(yīng)該保存在【哈希表】中哪一個位置

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

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

哈希表的每一個單元格都是一個桶式結(jié)構(gòu),可以保存多個元素,允許元素共存!!!


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

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

--------| Map<K, V> 雙列集合,這是一個接口

HashMap
TreeMap

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

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

 這里把鍵值對,認為是一個對象,組成一個類,稱之為Entry
    
     class Entry<K, V> {
        K key;
        V value;
     } 
     這里可以認為在Map集合中,保存的每一個鍵值對都是一個Entry對象,把這些Entry對象獲取出來,
     做成一個集合,進行遍歷
     entrySet();
     Map.Entry
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,837評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,196評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,688評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,654評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,456評論 6 406
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,955評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,044評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,195評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,725評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,608評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,802評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,318評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,048評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,422評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,673評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,424評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,762評論 2 372

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

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