Java集合框架

集合框架是為表示和操作集合而規(guī)定的一種統(tǒng)一的標(biāo)準(zhǔn)的體系結(jié)構(gòu)沮趣。

任何集合框架都包含三大塊內(nèi)容:對(duì)外的接口务傲、接口的實(shí)現(xiàn)和對(duì)集合運(yùn)算的算法狈癞。
適合存儲(chǔ)復(fù)雜的數(shù)據(jù)結(jié)構(gòu)履羞。

  • 接口:表示集合的抽象數(shù)據(jù)類型峦萎。接口提供了讓我們對(duì)集合中所表示的內(nèi)容進(jìn)行單獨(dú)操作的可能屡久。
  • 實(shí)現(xiàn):集合框架中接口的具體實(shí)現(xiàn)。實(shí)際它們就是那些可復(fù)用的數(shù)據(jù)結(jié)構(gòu)爱榔。
  • 算法:在一個(gè)實(shí)現(xiàn)了某個(gè)集合框架中的接口的對(duì)象身上完成某種有用的計(jì)算的方法被环,例如查找、排序等详幽。這些算法通常是多態(tài)的筛欢,因?yàn)橄嗤姆椒梢栽谕粋€(gè)接口被多個(gè)類實(shí)現(xiàn)時(shí)有不同的表現(xiàn)
集合框架.png
  • Iterator接口

  • Collection接口(存儲(chǔ)不唯一,無(wú)序?qū)ο?

    • List接口(存儲(chǔ)不唯一唇聘,有序?qū)ο?<-----實(shí)現(xiàn)類:ArrayList,LinkedList
    • Set接口(存儲(chǔ)唯一版姑,無(wú)序?qū)ο?<-----實(shí)現(xiàn)類:HashSet,TreeSet
  • Map接口(存儲(chǔ)一組鍵值對(duì)象) 實(shí)現(xiàn)類:HashMap,TreeMap

  • 算法類:Collections,Arrays

Iterator接口

專門對(duì)集合進(jìn)行迭代的迭代器,主要有兩個(gè)方法

hasNext();//判斷是否存在下一個(gè)可訪問(wèn)的元素迟郎,如果有就繼續(xù)迭代剥险,返回true,否則返回false
next();//返回要訪問(wèn)的下一個(gè)元素

ArrayList

基于數(shù)組的存儲(chǔ)方式宪肖,在內(nèi)存中分配連續(xù)的空間存放數(shù)據(jù)表制,遍歷元素的隨機(jī)訪問(wèn)的效率比較高。對(duì)數(shù)組進(jìn)行了封裝控乾,實(shí)現(xiàn)了長(zhǎng)度可變的數(shù)組夫凸。也可理解為存放對(duì)象的動(dòng)態(tài)數(shù)組。

常用方法:

boolean add(E e)  //將指定的元素添加到此列表的尾部阱持。
void add(int index, E element) //將指定的元素插入此列表中的指定位置夭拌。
void clear()//移除此列表中的所有元素。
boolean contains(Object o)//如果此列表中包含指定的元素衷咽,則返回 true鸽扁。
E get(int index)//返回此列表中指定位置上的元素。
int indexOf(Object o)//返回此列表中首次出現(xiàn)的指定元素的索引镶骗,或如果此列表不包含元素桶现,則返回 -1。
boolean isEmpty()//如果此列表中沒(méi)有元素鼎姊,則返回 true
E set(int index, E element)//用指定的元素替代此列表中指定位置上的元素骡和。
E remove(int index)//移除此列表中指定位置上的元素。
boolean remove(Object o)//移除此列表中首次出現(xiàn)的指定元素(如果存在)相寇。
int size()//返回此列表中的元素?cái)?shù)慰于。

示例代碼:

public class Demo {
    public static void main(String[] args) {
      ArrayList<String> list = new ArrayList<String>();
      list.add("張三豐");
      list.add("郭靖");
      list.add(1,"楊過(guò)");
      System.out.println(list.contains("李莫愁"));
      list.remove(0);
      list.set(1, "黃蓉");
      for(int i = 0; i < list.size(); i++){
          String name = list.get(i);
          System.out.println(name);
      }
      System.out.println(list.indexOf("小龍女"));
      list.clear();
      System.out.println(list.isEmpty());
    }
}

LinkedList

基于鏈表的存儲(chǔ)方式,插入唤衫、刪除元素時(shí)效率比較高婆赠,查找效率低。
LinkedList除了包含ArrayList的方法外佳励,還有一些獨(dú)有的方法休里。

void addFirst(E e)//在集合首部插入元素
void addLast(E e)//在集合尾部插入元素
E getFirst()//獲得當(dāng)前集合的第一個(gè)元素
E getLast()//獲得當(dāng)前集合的最后一個(gè)元素
E removeFirst()//移除并返回當(dāng)前集合的第一個(gè)元素
E removeLast()//移除并返回當(dāng)前集合的最后一個(gè)元素
public class Demo {
    public static void main(String[] args) {
        NewsTitle car = new NewsTitle(1,"汽車","管理員");
        NewsTitle medical = new NewsTitle(2,"醫(yī)學(xué)","管理員");
        NewsTitle fun = new NewsTitle(3,"娛樂(lè)","管理員");
        NewsTitle gym = new NewsTitle(4,"體育","管理員");
        
        LinkedList<NewsTitle> newsTitleList = new LinkedList<NewsTitle>();
        newsTitleList.add(car);
        newsTitleList.add(medical);
        newsTitleList.addFirst(fun);
        newsTitleList.addLast(gym);
        NewsTitle first = (NewsTitle)newsTitleList.getFirst();
        NewsTitle last = (NewsTitle)newsTitleList.getLast();
        System.out.println("頭條是"+first.getTitle());
        System.out.println("最后一條是"+last.getTitle());
        
        newsTitleList.removeFirst();
        newsTitleList.removeLast();
        System.out.println("頭條和末尾已刪除");

        for(NewsTitle news : newsTitleList){
            System.out.println("新聞標(biāo)題是: "+news.getTitle());
        }
    }
}

HashSet

基于散列的數(shù)據(jù)存儲(chǔ)方式蛆挫,存放唯一、無(wú)序的對(duì)象妙黍,存放的其實(shí)是對(duì)象的引用悴侵,采用equals()方法比較兩個(gè)對(duì)象的指針,保證對(duì)象在集合中是唯一的拭嫁。在無(wú)序的集合中查找元素的效率比較高可免。

常用方法:

boolean add(E e)//如果此 set 中尚未包含指定元素,則添加指定元素噩凹。
void clear()//從此 set 中移除所有元素巴元。
boolean contains(Object obj)//如果此 set 包含指定元素,則返回 true驮宴。
boolean isEmpty()//如果此 set 不包含任何元素逮刨,則返回 true。
Iterator<E> iterator()//返回對(duì)此 set 中元素進(jìn)行迭代的迭代器堵泽。
boolean remove(Object o)//如果指定元素存在于此 set 中修己,則將其移除。
int size()//返回此 set 中的元素的數(shù)量(set 的容量)迎罗。

示例代碼:

public class Demo {
    public static void main(String[] args) {
        NewsTitle car = new NewsTitle(1,"汽車","管理員");
        NewsTitle test = new NewsTitle(2,"高考","管理員");
        
        Set<NewsTitle> newsTitleList = new HashSet<NewsTitle>();
        newsTitleList.add(car);
        newsTitleList.add(test);
        
        System.out.println("新聞標(biāo)題數(shù)目為:"+newsTitleList.size());
        System.out.println("汽車新聞是否存在:"+newsTitleList.contains(car));
        newsTitleList.remove(car);
        System.out.println("集合是否為空:"+newsTitleList.isEmpty());
        
        System.out.println("遍歷新聞所有標(biāo)題:");
        for(NewsTitle news : newsTitleList){
            System.out.println("新聞標(biāo)題是:"+news.getTitle());
        }
    }
}

HashMap

Map接口存儲(chǔ)一組成對(duì)的鍵值對(duì)象睬愤,(key,value),提供key到value的映射,通過(guò)key來(lái)檢索纹安,key必須唯一尤辱,可以無(wú)序;value可以無(wú)序厢岂,可以不唯一光督。
HashMap的查詢指定元素效率較高。

常用方法:

void clear()//清空集合中的所有元素
boolean  containsKey(Object key)//集合中是否存在key
boolean  containsValue(Object value)//集合中是否存在value
boolean  isEmpty()//集合是否為空
V put(K key, V value)//將一對(duì)key,value放入集合塔粒,如果集合中已經(jīng)存在结借,將替換舊值
V get(Object key)//根據(jù)key,返回對(duì)應(yīng)的value
V remove(Object key)//從集合中移除與key相關(guān)的映射卒茬,并返回key關(guān)聯(lián)的value
int size()//集合中元素的數(shù)量
Set<K> keySet()//返回所有key的集合
Collection<V>  values()//返回所有value的集合

示例代碼:

public class Demo {
    public static void main(String[] args) {
        Student stu1 = new Student("郭靖","男");
        Student stu2 = new Student("黃蓉","女");
        
        Map<String, Student> students = new HashMap<String, Student>();
        students.put("tom", stu1);
        students.put("rose",stu2);
        System.out.println("已添加"+students.size()+"個(gè)學(xué)生信息");
        System.out.println("鍵集"+students.keySet());
        
        String key = "tom";
        if(students.containsKey(key)){
            Student stu = students.get(key);
            System.out.println("英文名是"+key+"的學(xué)生是"+stu.getName());
        }
        
        String key1 = "rose";
        if(students.containsKey(key1)){
            students.remove(key1);
            System.out.println(key1+"學(xué)員的信息已刪除");
        }
    }
}

Collections

Collections是Java提供的一個(gè)集合操作工具類船老,包含了大量的靜態(tài)方法,用于實(shí)現(xiàn)對(duì)集合元素的排序圃酵、查找和替換等柳畔。

常用方法:

sort();//對(duì)集合中的元素排序,要實(shí)現(xiàn)一個(gè)類的對(duì)象排序辜昵,這個(gè)類就要實(shí)現(xiàn)Comparable接口荸镊,重寫compareTo()方法,按指定方式比較對(duì)象堪置,再調(diào)用Collections的sort()方法
binarySearch();//查詢?cè)毓妫祷卦叵聵?biāo)
fill();//替換集合中的所有元素為相同元素

示例代碼:

public class Student implements Comparable<Object>{//實(shí)現(xiàn)Comparable接口
    private int number = 0;
    private String name = null;
    private String gender = null;
    //......省略......
    
    @Override
    public int compareTo(Object obj) {//重寫compareTo()方法
        Stu stu = (Stu)obj;
        if(this.number == stu.getNumber()){
            return 0;
        }else if(this.number > stu.getNumber()){
            return 1;
        }else{
            return -1;
        }
    }
}

public class Demo {
    public static void main(String[] args) {
        Student s1 = new Stu();
        //......省略......
        ArrayList<Stu> list = new ArrayList<Stu>();
        list.add(s1);
        list.add(s2);
        list.add(s3);

        Collections.sort(list);//排序
        System.out.println("排序后:————————————————");
        Iterator<Student> it = list.iterator();
        while(it.hasNext()){
            Student stu = (Student)it.next();
            System.out.println(stu.getNumber());
        }

        int index = Collections.binarySearch(list, s1);//查詢
        System.out.println("s1的索引是:"+index);

        Collections.fill(list, s1);//list中的所有元素都替換成s1
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市舀锨,隨后出現(xiàn)的幾起案子岭洲,更是在濱河造成了極大的恐慌,老刑警劉巖坎匿,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盾剩,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡替蔬,警方通過(guò)查閱死者的電腦和手機(jī)告私,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)承桥,“玉大人驻粟,你說(shuō)我怎么就攤上這事⌒滓欤” “怎么了蜀撑?”我有些...
    開(kāi)封第一講書人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)剩彬。 經(jīng)常有香客問(wèn)我酷麦,道長(zhǎng),這世上最難降的妖魔是什么喉恋? 我笑而不...
    開(kāi)封第一講書人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任沃饶,我火速辦了婚禮,結(jié)果婚禮上轻黑,老公的妹妹穿的比我還像新娘糊肤。我一直安慰自己,他們只是感情好苔悦,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布轩褐。 她就那樣靜靜地躺著,像睡著了一般玖详。 火紅的嫁衣襯著肌膚如雪把介。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 52,713評(píng)論 1 312
  • 那天蟋座,我揣著相機(jī)與錄音拗踢,去河邊找鬼。 笑死向臀,一個(gè)胖子當(dāng)著我的面吹牛巢墅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼君纫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼驯遇!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蓄髓,我...
    開(kāi)封第一講書人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤叉庐,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后会喝,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體陡叠,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年肢执,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了枉阵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡预茄,死狀恐怖兴溜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情反璃,我是刑警寧澤昵慌,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站淮蜈,受9級(jí)特大地震影響斋攀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜梧田,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一淳蔼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧裁眯,春花似錦鹉梨、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至逢艘,卻和暖如春旦袋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背它改。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工疤孕, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人央拖。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓祭阀,卻偏偏與公主長(zhǎng)得像鹉戚,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子专控,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

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

  • 標(biāo)簽(空格分隔): Java集合框架 問(wèn)題思考 什么是集合框架抹凳? 為什么用集合框架? 怎么用集合框架踩官? 問(wèn)題解決 ...
    outSiderYN閱讀 676評(píng)論 0 13
  • title: java集合框架學(xué)習(xí)總結(jié) tags:集合框架 categories:總結(jié) date: 2017-03...
    行徑行閱讀 1,692評(píng)論 0 2
  • java集合類可以用于存儲(chǔ)數(shù)量不等的多個(gè)對(duì)象却桶,并且可以實(shí)現(xiàn)常用的數(shù)據(jù)結(jié)構(gòu)比如棧境输,隊(duì)列等蔗牡。與數(shù)組不同,數(shù)組長(zhǎng)度是不可...
    張松松閱讀 277評(píng)論 0 0
  • 幼師畢業(yè)的我嗅剖,不曾系統(tǒng)的學(xué)過(guò)畫畫辩越,只能勉強(qiáng)算是走馬觀花似的各種畫法都嘗試過(guò),老師教的比較多信粮,基本上是一一點(diǎn)到為止黔攒,...
    凈染閱讀 595評(píng)論 0 1
  • 查看CocoaPods版本 命令行更新(安裝)步驟【更新】 在運(yùn)行 sudo gem install cocoap...
    Manba_小洛閱讀 421評(píng)論 0 0