集合

集合

-------| Collection 單例集合的跟接口阔逼。
----------| List 如果是實(shí)現(xiàn)了List接口的集合類,具備的特點(diǎn): 有序地沮,可重復(fù)嗜浮。
----------| Set 如果是實(shí)現(xiàn)了Set接口的集合類,具備特點(diǎn): 無序摩疑,不可重復(fù)危融。
Collection接口中的方法:

    增加
        add(E e)  添加成功返回true,添加失敗返回false.
        addAll(Collection c)  把一個(gè)集合 的元素添加到另外一個(gè)集合中去雷袋。

    刪除
        clear() 
        remove(Object o) 

        removeAll(Collection  c)      刪除交集
        retainAll(Collection  c)         保留交集

    查看
        size() 

    判斷
        isEmpty() 
        contains(Object o) 
        containsAll(Collection<?> c) 

    迭代
        toArray() 
        iterator() 

List

ArrayList 底層是維護(hù)了一個(gè)Object數(shù)組實(shí)現(xiàn) 的吉殃, 特點(diǎn): 查詢速度快辞居,增刪慢。
什么時(shí)候使用ArrayList: 如果目前的數(shù)據(jù)是查詢比較多蛋勺,增刪比較少的時(shí)候瓦灶,那么就使用ArrayList存儲這批數(shù)據(jù)。

LinkedList底層是使用了鏈表數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)的抱完, 特點(diǎn): 查詢速度慢贼陶,增刪快

Vector(了解即可)底層也是維護(hù)了一個(gè)Object的數(shù)組實(shí)現(xiàn)的,實(shí)現(xiàn)與ArrayList是一樣的巧娱,但是Vector是線程安全的碉怔,操作效率低。

List特有方法

    添加
        add(int index, E element) 
        addAll(int index, Collection<? extends E> c) 
    獲冉怼:
        get(int index)     
        indexOf(Object o) 
        lastIndexOf(Object o) 
        subList(int fromIndex, int toIndex)   截取
    修改:
        set(int index, E element)       

    迭代
        listIterator() 

只有List接口下面的集合類才具備索引值撮胧。其他接口下面的集合類都沒有索引值。

ListIterator迭代器特有的方法:

    添加:
        hasPrevious()  判斷是否存在上一個(gè)元素老翘。 可用于逆序
        hasNext()   問是否有元素可遍歷芹啥。如果有元素可以遍歷,返回true铺峭,否則返回false 叁征。

        previous()    當(dāng)前指針先向上移動一個(gè)單位,然后再取出當(dāng)前指針指向的元素逛薇。

        next();  先取出當(dāng)前指針指向的元素,然后指針向下移動一個(gè)單位疏虫。     

        remove()  移除迭代器最后一次返回 的元素永罚。

---------------------------    

        add(E e)   把當(dāng)前有元素插入到當(dāng)前指針指向的位置上。
        set(E e)   替換迭代器最后一次返回的元素卧秘。

Set

HashSet 底層是使用了哈希表來支持的呢袱,特點(diǎn): 存取速度快.
TreeSet 如果元素具備自然順序 的特性,那么就按照元素自然順序的特性進(jìn)行排序存儲

treeSet要注意的事項(xiàng):
1. 往TreeSet添加元素的時(shí)候翅敌,如果元素本身具備了自然順序的特性羞福,那么就按照元素自然順序的特性進(jìn)行排序存儲。
2. 往TreeSet添加元素的時(shí)候蚯涮,如果元素本身不具備自然順序的特性治专,那么該元素所屬的類必須要實(shí)現(xiàn)Comparable接口,把元素 的比較規(guī)則定義在compareTo(T o)方法上遭顶。

 3. 如果比較元素的時(shí)候张峰,compareTo方法返回 的是0,那么該元素就被視為重復(fù)元素棒旗,不允許添加.(注意:TreeSet與HashCode喘批、equals方法是沒有任何關(guān)系。)

 4. 往TreeSet添加元素的時(shí)候, 如果元素本身沒有具備自然順序 的特性,而元素所屬的類也沒有實(shí)現(xiàn)Comparable接口饶深,那么必須要在創(chuàng)建TreeSet的時(shí)候傳入一個(gè) 比較器餐曹。

 5.  往TreeSet添加元素的時(shí)候,如果元素本身不具備自然順序的特性敌厘,而元素所屬的類已經(jīng)實(shí)現(xiàn)了Comparable接口台猴, 在創(chuàng)建TreeSet對象的時(shí)候也傳入了比較器
 那么是以比較器的比較規(guī)則優(yōu)先使用。

自定義比較器的格式 :

         class  類名  implements Comparator{

         }

集合循環(huán)

        // 方案一
        personList.forEach(person -> {
            System.out.println("方案一" + person.toString());
        });

        // 方案二
        for (Person person : personList){
            System.out.println("方案二--->" + person.toString());
        }

        // 方案三
        Iterator items = students.entrySet().iterator();
            while (items.hasNext()) {
                Map.Entry entry = (Map.Entry) items.next();
                Student student = (Student) entry.getValue();
                list.add(statistical);
            }

        // 方案四:
        for (int i = 0; i < personList.size(); i++) {
            System.out.println("方案四--->" + personList.get(i));
        }

Map

數(shù)據(jù)是以映射關(guān)系存在的额湘,也就是成對存在的: key - value

-------------| Map 如果是實(shí)現(xiàn)了Map接口的集合類卿吐,具備的特點(diǎn): 存儲的數(shù)據(jù)都是以鍵值對的形式存在的,鍵不可重復(fù)锋华,值可以重復(fù)嗡官。
----------------| HashMap 底層也是基于哈希表實(shí)現(xiàn) 的。
----------------| TreeMap 基于紅黑樹(二叉樹)數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)毯焕,鍵排序存儲衍腥。
----------------| Hashtable

Map接口的方法

     添加:
         put(K key, V value) 
         putAll(Map<? extends K,? extends V> m) 

     刪除
         remove(Object key) 
         clear() 

     獲取:
         get(Object key) 
         size() 

     判斷:
         containsKey(Object key) 
         containsValue(Object value) 
         isEmpty() 

    迭代:
        keySet() 
        values() 
        entrySet() 

HashMap

存儲原理:
往HashMap添加元素的時(shí)候纳猫,首先會調(diào)用鍵的hashCode方法得到元素 的哈希碼值婆咸,然后經(jīng)過運(yùn)算就可以算出該元素在哈希表中的存儲位置。

  • 情況1: 如果算出的位置目前沒有任何元素存儲芜辕,那么該元素可以直接添加到哈希表中尚骄。
  • 情況2:如果算出 的位置目前已經(jīng)存在其他的元素,那么還會調(diào)用該元素的equals方法與這個(gè)位置上的元素進(jìn)行比較侵续,如果equals方法返回 的是false倔丈,那么該元素允許被存儲,如果equals方法返回的是true状蜗,那么該元素被視為 重復(fù)元素需五,不允存儲。

TreeMap

基于紅黑樹(二叉樹)數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)的轧坎, 特點(diǎn):會對元素的鍵進(jìn)行排序存儲宏邮。

TreeMap 要注意的事項(xiàng)

  1. 往TreeMap添加元素的時(shí)候,如果元素的鍵具備自然順序缸血,那么就會按照鍵的自然順序特性進(jìn)行排序存儲蜜氨。
  2. 往TreeMap添加元素的時(shí)候,如果元素的鍵不具備自然順序特性捎泻, 那么鍵所屬的類必須要實(shí)現(xiàn)Comparable接口记劝,把鍵的比較規(guī)則定義在CompareTo方法上。
  3. 往TreeMap添加元素的時(shí)候族扰,如果元素的鍵不具備自然順序特性厌丑,而且鍵所屬的類也沒有實(shí)現(xiàn)Comparable接口定欧,那么就必須在創(chuàng)建TreeMap對象的時(shí)候傳入比較器。

Ma循環(huán)和排序

        // map -- > list
        List<Person> result = personHashMap.entrySet().stream()
                .map(x -> x.getValue())
                .collect(Collectors.toList());

        // sort 排序
        Map<Integer, Person> results = new LinkedHashMap<>();
        personHashMap.entrySet().stream()
                .sorted(Map.Entry.comparingByKey())
                .forEachOrdered(x -> results.put(x.getKey(), x.getValue()));


        // ******************* 循環(huán)的幾種方式   **************
        // 法一 推薦
        Set<Map.Entry<Integer, Person>> entryEntry = personHashMap.entrySet();
        for (Map.Entry<Integer, Person> entry : entryEntry) {
            System.out.println("鍵:" + entry.getKey() + "值:" + entry.getValue());
        }

        // 法二
        personHashMap = null;
        personHashMap.forEach((integer, person) -> {
            System.out.println("法五:鍵:" + integer + "值:" + person);
        });

        // 法三 效率高
        Iterator items = personHashMap.entrySet().iterator();
        while (items.hasNext()) {
            Map.Entry entry = (Map.Entry) items.next();
            System.out.println("鍵:" + entry.getKey() + "值:" + entry.getValue());
        }

        // 法四 效率低
        Iterator iter = personHashMap.keySet().iterator();
        while (iter.hasNext()) {
            Object key = iter.next();
            Object val = personHashMap.get(key);
            System.out.println("鍵:" + key + "值:" + val);
        }

        // 法五
        for (Integer key : personHashMap.keySet()) {
            System.out.println("鍵:" + key + "值:" + personHashMap.get(key));
        }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末怒竿,一起剝皮案震驚了整個(gè)濱河市砍鸠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌耕驰,老刑警劉巖爷辱,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異朦肘,居然都是意外死亡饭弓,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門媒抠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弟断,“玉大人,你說我怎么就攤上這事趴生》浚” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵苍匆,是天一觀的道長刘急。 經(jīng)常有香客問我,道長浸踩,這世上最難降的妖魔是什么叔汁? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮检碗,結(jié)果婚禮上攻柠,老公的妹妹穿的比我還像新娘。我一直安慰自己后裸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布冒滩。 她就那樣靜靜地躺著微驶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪开睡。 梳的紋絲不亂的頭發(fā)上因苹,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機(jī)與錄音篇恒,去河邊找鬼扶檐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛胁艰,可吹牛的內(nèi)容都是我干的款筑。 我是一名探鬼主播智蝠,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼奈梳!你這毒婦竟也來了杈湾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤攘须,失蹤者是張志新(化名)和其女友劉穎漆撞,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體于宙,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡浮驳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捞魁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片至会。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖署驻,靈堂內(nèi)的尸體忽然破棺而出奋献,到底是詐尸還是另有隱情,我是刑警寧澤旺上,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布瓶蚂,位于F島的核電站,受9級特大地震影響宣吱,放射性物質(zhì)發(fā)生泄漏窃这。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一征候、第九天 我趴在偏房一處隱蔽的房頂上張望杭攻。 院中可真熱鬧,春花似錦疤坝、人聲如沸兆解。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锅睛。三九已至,卻和暖如春历谍,著一層夾襖步出監(jiān)牢的瞬間现拒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工望侈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留印蔬,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓脱衙,卻偏偏與公主長得像侥猬,于是被迫代替她去往敵國和親例驹。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

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