java學(xué)習(xí)筆記(4)——常見的集合及方法(1)

在日常的數(shù)據(jù)分析工作中,常常需要使用到集合來存儲和處理數(shù)據(jù)臭笆,因此需要對集合的分類和功能有所了解缭裆。Java的集合框架分為兩部分底挫,分別對應(yīng)兩大接口:Collection接口和Map接口。以下就通過這兩大接口開始講解淑际。這篇文章主要講Collection接口畏纲。

接口

先說說接口是什么,接口(英文:Interface)春缕,在JAVA編程語言中是一個抽象類型盗胀,是抽象方法的集合,接口通常以interface來聲明锄贼。一個類通過繼承接口的方式票灰,從而來繼承接口的抽象方法。

1、接口的聲明

/* 文件名 : Animal.java */
interface Animal {
   public void eat();
   public void travel();
}

2屑迂、接口的實現(xiàn)
當(dāng)類實現(xiàn)接口的時候浸策,類要實現(xiàn)接口中所有的方法。否則惹盼,類必須聲明為抽象的類庸汗。類使用implements關(guān)鍵字實現(xiàn)接口。

/* 文件名 : MammalInt.java */
public class MammalInt implements Animal{
 
   public void eat(){
      System.out.println("Mammal eats");
   }
 
   public void travel(){
      System.out.println("Mammal travels");
   } 
 
   public int noOfLegs(){
      return 0;
   }
 
   public static void main(String args[]){
      MammalInt m = new MammalInt();
      m.eat();
      m.travel();
   }
}

collection接口涉及三種類型的集合:1.Set(規(guī)則集) 2.List(線性表) 3.Queue(隊列)


image.png
image.png

1手报、List接口

List的主要特征:
(1)有序(ordered):元素的存取是有序的蚯舱,保證了取出的元素的順序與輸入的元素順序保持一致。
(2)索引(index):允許用戶根據(jù)索引對元素進行精準(zhǔn)定位并進行查詢掩蛤、插入枉昏、刪除等操作。
(3)允許重復(fù):允許多個重復(fù)的元素存在盏档。

import java.util.*;

public class CollectionDemo {
    public static void main(String[] args) {

        // ArrayList

        ArrayList<String> list = new ArrayList<String>(); // 父類接口List引用ArrayList
        list.add("Hello");
        list.add("World");
        list.add("HAHAHAHA");

        // 第一種遍歷方法使用 For-Each 遍歷 List
        for (String str : list) { // 也可以改寫 for(int i=0;i<list.size();i++) 這種形式
            System.out.println(str);
        }

        // 第二種遍歷凶掰,把鏈表變?yōu)閿?shù)組相關(guān)的內(nèi)容進行遍歷
        // 創(chuàng)建數(shù)組:dataType[] arrayRefVar = new dataType[arraySize];
        String[] strArray = new String[list.size()];
        list.toArray(strArray);
        for (int i = 0; i < strArray.length; i++) { // 這里也可以改寫為 for(String str:strArray) 這種形式
            System.out.println(strArray[i]);
        }

        // 第三種遍歷 使用迭代器進行相關(guān)遍歷,該方法可以不用擔(dān)心在遍歷的過程中會超出集合的長度
        Iterator<String> ite = list.iterator();
        while (ite.hasNext()) { // 判斷下一個元素之后有值
            System.out.println(ite.next());
        }

        // LinkedList
        LinkedList<String> list2 = new LinkedList<String>();
        list2.add("11");
        list2.add("22");
        list2.add("33");
        for (String str : list2) {
            System.out.println(str);
        }

        // Vector
        Vector<String> list3 = new Vector<String>();
        list3.add("111");
        list3.add("222");
        list3.add("333");
        for (String str : list3) {
            System.out.println(str);
        }
    }
}

2蜈亩、Set接口

Set的主要特征
(1)不允許重復(fù):元素不允許重復(fù)懦窘。Set在存儲元素時會通過hashCode()和equals()來保證元素的唯一性。
Set如何保證元素的唯一性:
Set在存儲元素時稚配,通過hashCode()和equals()來保證元素的唯一性畅涂。
事實上,當(dāng)存儲一個新的元素時道川,僅僅通過equals()來逐一判斷新元素是否與集合中已有的元素是否重合午衰,這種方法也是可行的,那為什么還需要hashCode()呢冒萄。因為當(dāng)Set中元素數(shù)量很多時臊岸,通過equals()逐一判斷并不是一個高效率的方法,所以同時通過hashCode()和equals()進行判斷可以提高判斷的效率尊流。
hashCode()是Object的類帅戒,每個對象都具有hashCode值。不同的對象可能會有相同的hashCode值崖技,但hashCode值不相同的兩個對象肯定不同逻住。
我們可以用映射的概念來理解對象與hashCode之間的關(guān)系,對象(value)與hashCode(key)構(gòu)成了多對一的映射迎献。
當(dāng)每次存儲新的元素時瞎访,首先通過hashCode()獲得新元素的hashCode,判斷是否與已有元素的hashCode相同吁恍。如果沒有扒秸,將新元素加入到集合中播演。如果有,再通過equals()判斷元素是否相同伴奥,如果相同宾巍,則不添加該元素,如果不同渔伯,則把該元素加到集合中顶霞。

2.1 HashSet

HashSet元素存儲的結(jié)構(gòu)是哈希表。
hashSet除了不允許重復(fù)元素外锣吼,還不能保證元素存取的順序选浑。

import java.util.*;

public class setDemo1 {
    public static void main(String[] args) {

        HashSet<String> hash = new HashSet<String>();
        hash.add("11");
        hash.add("22");
        hash.add("33");

        Iterator<String> it = hash.iterator();
        while (it.hasNext()) {
            System.out.print(it.next() + " "); // 每次輸出的順序都不一樣
        }

    }

}
2.2 LinkedHashSet

LinkedHashSet的元素的存儲結(jié)構(gòu)是鏈表和哈希表。
LinkedHashSet保證了元素存取的順序玄叠。
LinkedHashSet遵循先進先出的順序

import java.util.*;

public class setDemo2 {
    public static void main(String[] args) {

        LinkedHashSet<String> lset = new LinkedHashSet<String>();
        lset.add("11");
        lset.add("22");
        lset.add("33");
        Iterator<String> it = lset.iterator();
        while (it.hasNext()) {
            System.out.print(it.next() + " ");
        }

    }
}

TreeSet可以保證元素存取的順序

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末古徒,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子读恃,更是在濱河造成了極大的恐慌隧膘,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寺惫,死亡現(xiàn)場離奇詭異疹吃,居然都是意外死亡,警方通過查閱死者的電腦和手機西雀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門萨驶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人艇肴,你說我怎么就攤上這事腔呜。” “怎么了再悼?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵核畴,是天一觀的道長。 經(jīng)常有香客問我冲九,道長谤草,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任娘侍,我火速辦了婚禮咖刃,結(jié)果婚禮上泳炉,老公的妹妹穿的比我還像新娘憾筏。我一直安慰自己,他們只是感情好花鹅,可當(dāng)我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布氧腰。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪古拴。 梳的紋絲不亂的頭發(fā)上箩帚,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機與錄音黄痪,去河邊找鬼紧帕。 笑死,一個胖子當(dāng)著我的面吹牛桅打,可吹牛的內(nèi)容都是我干的是嗜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼挺尾,長吁一口氣:“原來是場噩夢啊……” “哼鹅搪!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起遭铺,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤丽柿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后魂挂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體甫题,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年涂召,在試婚紗的時候發(fā)現(xiàn)自己被綠了幔睬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡芹扭,死狀恐怖麻顶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情舱卡,我是刑警寧澤辅肾,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站轮锥,受9級特大地震影響矫钓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜舍杜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一新娜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧既绩,春花似錦概龄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蚕键。三九已至,卻和暖如春衰粹,著一層夾襖步出監(jiān)牢的瞬間锣光,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工铝耻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留誊爹,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓瓢捉,卻偏偏與公主長得像替废,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子泊柬,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,601評論 2 353

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