集合詳解

一纸淮、Collections集合工具類

(1)常用方法

  • Collections.min();最小值
  • Collections.max();最大值
  • Collections.sort();對集合進行排序
  • Collections.swap();交換集合中指定元素索引的位置
  • Collections.reverse();反轉(zhuǎn)集合中元素的順序
  • Collections.shuffle();對集合進行隨機排序
  • Collections.fill();替換集合list中的所有元素
  • Collections.copy();將集合a中的元素全部復(fù)制到b中,并且覆蓋相應(yīng)索引的元素
  • Collections.replaceAll();替換指定元素為某元素,替換值存在剛返回true亚享,反之返回false
  • Collections.indexOfSubList();查找子集在list中首次出現(xiàn)位置的索引
  • Collections.lastIndexOfSubList();查找子集在list中最后一次出現(xiàn)位置的索引
  • Collections.binarySearch);查找指定集合中的元素咽块,返回所查找元素的索引
  • Collections.rotate();集合中的元素向后移m個位置,在后面被遮蓋的元素循環(huán)到前面來

(2)設(shè)置比較規(guī)則

    //如果age為int類型需要轉(zhuǎn)為Integer
    private class MyComparator implements Comparator<Person>{

        @Override
        public int compare(Person o1, Person o2) {
            return o1.getAge().compareTo(o2.getAge());
        }
    }
public class Person implements Comparable<Person> {
    public Integer age;
    public String name;

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public int compareTo(Person o) {
        return this.age.compareTo(o.getAge());
    }
}

二虹蒋、List集合

(1)集合常用方法

  • list.add();添加數(shù)據(jù)
  • list.addAll();添加數(shù)據(jù)集合
  • list.remove();刪除數(shù)據(jù)
  • list.removeAll();刪除數(shù)據(jù)集合
  • list.set();修改數(shù)據(jù)
  • list.get();查找數(shù)據(jù)
  • list.subList();截取集合(包前不包后)
  • list.clear();清空集合數(shù)據(jù)
  • list.isEmpty();判斷集合中是否存在元素
  • list.size();獲取集合大小
  • list.toArray();集合變數(shù)組
  • list.contains();List中是否包含該元素
  • list.containsAll();List中是否包含該集合
  • list.indexOf();List中首次出現(xiàn)該元素的位置糜芳。
  • list.lastIndexOf();List中最后一次出現(xiàn)該元素的位置。
  • list.iterator();迭代器魄衅,用于遍歷取出元素

(2)ArrayList詳解

  • ArrayList是基于數(shù)組實現(xiàn)的list類峭竣,ArrayList其實是對數(shù)組的動態(tài)擴充,底層的數(shù)據(jù)結(jié)構(gòu)使用的是數(shù)組結(jié)構(gòu)晃虫,不指定的話長度默認為10皆撩。
  • ArrayList插入數(shù)據(jù)可以重復(fù),也是有序的哲银,按照插入的順序來排序扛吞。修改或查詢數(shù)據(jù)相對快。添加或刪除數(shù)據(jù)相對慢荆责,因為需要移動大量的數(shù)據(jù)滥比。ArrayList是線程不安全的。
  • list.ensureCapacity();擴充原有的數(shù)組

(3)LinkedList詳解

  • LinkedList是基于鏈表實現(xiàn)的雙向鏈表數(shù)據(jù)結(jié)構(gòu)做院。它每一個節(jié)點都包含三方面的內(nèi)容:節(jié)點本身的數(shù)據(jù)盲泛、前一個節(jié)點的信息濒持、下一個節(jié)點的信息。
  • 增加或刪除數(shù)據(jù)相對快寺滚。修改或查詢數(shù)據(jù)相對慢柑营,因為需要遍歷查找

(4)Vector

  • Vector中的很多重要方法都是用synchronized實現(xiàn)同步,保證線程安全村视。Vector是線程安全的ArrayList官套。

二、set集合

(1)HashSet

  • HashSet無序不允許集合元素的重復(fù)蚁孔,可以存儲null奶赔。底層數(shù)據(jù)結(jié)構(gòu)是哈希表。根據(jù)hashCode來決定存儲位置的勒虾。非線程安全纺阔,存取速度快。
  • 通過hashCode和equals來保證元素的唯一性修然。如果元素的hashCode相同才會判斷equals是否為true。如果hashCoed的值不同质况,則不會調(diào)用equals愕宋。

(2)TreeSet

  • TreeSet不允許集合元素的重復(fù)。底層數(shù)據(jù)結(jié)構(gòu)是二叉樹结榄,線程不安全中贝。可以對Set集合中的元素進行排序
  • TreeSet的排序讓元素自身具備比較性臼朗,元素需要實現(xiàn)comparable接口邻寿,覆蓋compareTo方法,如果兩個對象通過compareTo()方法比較相等视哑,那么新的元素將無法添加到TreeSet集合中绣否。
public class Person implements Comparable<Person> {
    public Integer age;
    public String name;

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public int compareTo(Person o) {
        return this.age.compareTo(o.getAge());
    }
}
  • 當元素本身不具備比較性,或者具備的比較性不是所需的挡毅,就需要讓集合自身具備比較性
public static void treeSetTest(){
    TreeSet treeSet = new TreeSet(new Comparator(){
        public int compare(Object o1,Object o2){
            M m1 = (M)o1;
            M m2 = (M)o2;
            return m1.age > m2.age ? -1 : m1.age < m2.age ? 1 : 0;
        }
    });
    treeSet.add(new M(2));
    treeSet.add(new M(8));
    treeSet.add(new M(5));
    treeSet.add(new M(-3));
}

static class M(){
    int age;
    public M(int age){
        this.age = age;
    }
}

(3)LinkedHashSet

  • LinkedHashSet不允許集合元素的重復(fù)蒜撮。集合也是根據(jù)元素的hashCode值來決定元素的存儲位置,但和hashSet不同的是它同時使用鏈表維護元素的次序跪呈,這樣使得元素看起來是以插入的順序保存的段磨。linkedHashSet按元素的添加順序來訪問集合里的元素。(LinkedHashSet需要維護元素的插入順序耗绿,因此性能略低于HashSet的性能苹支,但是在遍歷Set里面的全部元素將有很好的性能)

三、Map集合

  • Map<K, V>集合是一個接口误阻,和Collection集合不同的是债蜜,它是雙列集合晴埂,也就是說他所存儲的是鍵值對。其中鍵要求唯一策幼,一個鍵不能對應(yīng)多個值邑时。
  • put():添加鍵值對
  • get():根據(jù)鍵獲取值
  • containsKey():判斷是否包含鍵
  • containsValue();判斷是否包含值
  • remove():刪除鍵值對
  • replace():替換新值特姐,返回老值
  • replace(K key, V oldValue, V newValue):替換新值
  • Set<Map.Entry<K,V>> entrySet(): 包含所有鍵值對的Map對象的Set集合
  • Collection<V> values(): 獲取包含所有值的Collection集合
  • Set<K> keySet(): 獲取包含所有鍵的Set集合

(1)TreeMap

  • TreeMap是平衡排序二叉樹(紅黑樹)結(jié)構(gòu)晶丘,按自然排序或比較器存入元素以保證元素順序。TreeMap的鍵保唯一性唐含,取決于比較方法和比較器浅浮。非線程安全。

(2)HashMap

  • HashMap是哈希表結(jié)構(gòu)捷枯,不保證存取順序滚秩,允許null鍵或者null值。HashMap的鍵保持唯一性淮捆,取決于hashCode以及equals方法郁油。非線程安全,效率較高攀痊。

(3)HashTable

  • HashTable時哈希表結(jié)構(gòu)桐腌,不保證存取順序,不允許null鍵或者null值苟径,線程安全案站,效率較低,已經(jīng)被HashMap替代

(4)LinkedHashMap

  • LinkedHashMap是帶雙向鏈表的哈希表結(jié)構(gòu)棘街,保持存取順序蟆盐,允許null鍵和null值,非線程安全遭殉,效率較高石挂。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市恩沽,隨后出現(xiàn)的幾起案子誊稚,更是在濱河造成了極大的恐慌,老刑警劉巖罗心,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件里伯,死亡現(xiàn)場離奇詭異,居然都是意外死亡渤闷,警方通過查閱死者的電腦和手機疾瓮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來飒箭,“玉大人狼电,你說我怎么就攤上這事蜒灰。” “怎么了肩碟?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵羹唠,是天一觀的道長猬腰。 經(jīng)常有香客問我乡小,道長肮砾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任髓抑,我火速辦了婚禮咙崎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吨拍。我一直安慰自己褪猛,他們只是感情好,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布羹饰。 她就那樣靜靜地躺著伊滋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪队秩。 梳的紋絲不亂的頭發(fā)上新啼,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機與錄音刹碾,去河邊找鬼。 笑死座柱,一個胖子當著我的面吹牛迷帜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播色洞,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼戏锹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了火诸?” 一聲冷哼從身側(cè)響起锦针,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎置蜀,沒想到半個月后奈搜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡盯荤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年馋吗,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秋秤。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡宏粤,死狀恐怖脚翘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情绍哎,我是刑警寧澤来农,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站崇堰,受9級特大地震影響沃于,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赶袄,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一揽涮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧饿肺,春花似錦蒋困、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至溉跃,卻和暖如春村刨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背撰茎。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工嵌牺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人龄糊。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓逆粹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親炫惩。 傳聞我的和親對象是個殘疾皇子僻弹,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351

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