java中set集合基礎(chǔ)內(nèi)容

set集合的基本使用

無序并且不重復(fù)的集合驻仅,我們一般叫它為集挽牢。并且只能有一個null元素与学。
這個集合的作用是性能好。
Java.uitl 包里邊的內(nèi)容嘉抓。
HashSet()

集合的遍歷:
因為HashSet集合的遍歷是先轉(zhuǎn)化成迭代器索守,然后通過迭代器進行遍歷。如下代碼:
迭代器的兩個方法:
hashNext() 表示的是判斷下一個是否還有數(shù)據(jù)
next()取出下一個數(shù)據(jù)

代碼:

package com.demo;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class ListDemo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String str1="blue";
        String str2="green";
        String str3="yellow";
        String str4="red";
        String str5="white";
        
        //生成一個集合
        Set hashset=new HashSet();
        //集合里邊添加新的數(shù)據(jù)
        hashset.add(str1);
        hashset.add(str2);
        hashset.add(str3);
        hashset.add(str4);
        hashset.add(str5);
        
        //轉(zhuǎn)換成迭代器
        Iterator it=hashset.iterator();
        //然后循環(huán)遍歷這個迭代器
        while(it.hasNext()) {
            System.out.println(it.next()+",");
        }
    }

}

輸出的結(jié)果是:
red,
green,
blue,
white,
yellow,

實例

Cat類的代碼:

package com.dem.set;

public class Cat {
    //先定義屬性
    private String name;
    private int age;
    private String species;
    
    //構(gòu)造方法
    public Cat(String name,int age,String species) {
        super();
        this.name=name;
        this.age=age;
        this.species=species;
    }
    
    //get and  seT方法
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name=name;
    }

    public int getAge() {
        return this.age;
    }
    public void setAge(int age) {
        this.age=age;
    }
    public String getSpecies() {
        return this.species;
    }
    public void setSpcies(String species) {
        this.species=species;
    }

    //重寫toString方法
    @Override
    public String toString() {
        return "Cat [姓名=" + name + ", 年齡=" + age + ",品種=" + species + "]";
    }
}

cat類運行測試的代碼:

package com.dem.set;
import java.util.Set;
import java.util.HashSet;
import java.util.Iterator;
public class CatTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Cat cat1=new Cat("花花",10,"英國短毛貓");
        Cat cat2=new Cat("凡凡",8,"中華田園貓");
        
        Set catSet=new HashSet();
        catSet.add(cat1);
        catSet.add(cat2);
        Iterator it=catSet.iterator();
        while(it.hasNext()) {
            System.out.println(it.next());
        }
    }

}


** 測試代碼輸出的結(jié)果是:**
Cat [姓名=花花, 年齡=10,品種=英國短毛貓]
Cat [姓名=凡凡, 年齡=8,品種=中華田園貓]

HashCode和equels的原理抑片。
為什么要重寫卵佛。
以及這一次的Cat類的重寫。

equels方法是用來判斷類是否相等的默認方法敞斋。所以一個集合的兩個類是否相等調(diào)用的就是這個類的方法截汪。
所以,我們只要重寫這個方法就可以改變類的是否相等方法植捎。
類的對象都有默認的equels方法衙解,一般指的是這個類的對象的地址。
如下代碼焰枢,對象的內(nèi)容是一樣的蚓峦,但是兩個對象都可以添加進集合(set集合里邊是不重復(fù)):

        Cat cat1=new Cat("花花",10,"英國短毛貓");
        Cat cat2=new Cat("凡凡",8,"中華田園貓");
        //cat3和cat1的內(nèi)容是一樣的
        Cat cat3=new Cat("花花",10,"英國短毛貓");

輸出的結(jié)果是:
Cat [姓名=花花, 年齡=10,品種=英國短毛貓]
Cat [姓名=花花, 年齡=10,品種=英國短毛貓]
Cat [姓名=凡凡, 年齡=8,品種=中華田園貓]

修改eques方法后
equels方法改寫后的,如下代碼:

@Override
    public boolean equals(Object obj) {
        //如果兩個對象的引用是相等医咨,那么這兩個對象肯定是相等的
        if(this==obj) {
            return true;
        }
        //判斷某個對象的類方法是getClass,這個判斷只能雙等于
        if(obj.getClass()==this.getClass()) {
            //如果要使用這個類的方法枫匾,就需要轉(zhuǎn)成這個類
            Cat objCat=(Cat)obj;
            return objCat.getName()==this.getName() && 
                    objCat.getAge()==this.getAge() && objCat.getSpecies()==this.getSpecies();
        }
        
        return false;
    }

修改后的輸出結(jié)果:
Cat [姓名=花花, 年齡=10,品種=英國短毛貓]
Cat [姓名=凡凡, 年齡=8,品種=中華田園貓]

泛型

就是規(guī)定某個集合、或者某個迭代器拟淮、或者某個變量接收的內(nèi)容是固定的某個類型干茉。
泛型的語法是<類型>這樣的方式表示的。
例如以下代碼:

        Set<Cat> catSet=new HashSet<Cat>();
        catSet.add(cat1);
        catSet.add(cat2);
        catSet.add(cat3);
        Iterator<Cat> it=catSet.iterator();

集合的的for循環(huán)遍歷

for(Cat cat:set){} 這樣的方式進行遍歷的很泊。
set表示集合角虫,cat表示集合里邊的每一個內(nèi)容。
因為set的無序的集合委造,所以遍歷的時候也是無序的戳鹅。如果在遍歷的過程中出現(xiàn)刪除的現(xiàn)象,那么集合的順序又會別打亂昏兆,這時遍歷就會報錯枫虏。
如下時報錯的代碼:

Cat cat1=new Cat("花花",10,"英國短毛貓");
        Cat cat2=new Cat("凡凡",8,"中華田園貓");
        //cat3和cat1的內(nèi)容是一樣的
        Cat cat3=new Cat("花花",10,"英國短毛貓");
        
        Set<Cat> catSet=new HashSet<Cat>();
        catSet.add(cat1);
        catSet.add(cat2);
        catSet.add(cat3);
        for(Cat cat:catSet) {
            if(cat.getName()=="花花") {
                //set集合是無序的,刪除后集合會有變動爬虱。這樣會報錯隶债。
                catSet.remove(cat);
            }
            System.out.println("結(jié)束了");
        }

所報錯誤:
結(jié)束了
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMapHashIterator.nextNode(Unknown Source) at java.util.HashMapKeyIterator.next(Unknown Source)
at com.dem.set.CatTest.main(CatTest.java:19)

解決辦法
如果是刪除一個元素,那么刪除后直接break跑筝;
如果刪除多個元素可以用死讹,set.removeAll(集合);可以把多個元素放入到這個集合再進行刪除。

Map

Map是鍵值對的方式曲梗。
可以為null赞警,但是不能夠重復(fù)妓忍。
HashMap是這個Map的一個子類,使用Hash完成商品的信息愧旦。
實例如下:

Scanner consle=new Scanner(System.in);
        Map<String,Good> goodMap=new HashMap<String,Good>();
        
        int i=0;
        while(i<3) {
            System.out.println("請輸入商品的3條信息:");
            System.out.println("**********************");
            System.out.println("請輸入商品的id");
            String goodId=consle.next();
            System.out.println("請輸入商品的名稱");
            String goodName=consle.next();
            System.out.println("請輸入商品的價格");
            double goodPrice=consle.nextDouble();
            //把輸入的內(nèi)容添加到商品
            Good good=new Good(goodId,goodName,goodPrice);
            goodMap.put(goodId, good);
            i++;
        }
        //關(guān)閉輸入流
        consle.close();
        //輸出商品的內(nèi)容
        Iterator<Good> itGood=goodMap.values().iterator();
        while(itGood.hasNext()) {
            System.out.println(itGood.next());
        }
        
        System.out.println("***程序結(jié)束***");
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末世剖,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子忘瓦,更是在濱河造成了極大的恐慌搁廓,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耕皮,死亡現(xiàn)場離奇詭異境蜕,居然都是意外死亡,警方通過查閱死者的電腦和手機凌停,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門粱年,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人罚拟,你說我怎么就攤上這事台诗。” “怎么了赐俗?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長阻逮。 經(jīng)常有香客問我,道長叔扼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任瓜富,我火速辦了婚禮鳍咱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谤辜。我一直安慰自己,他們只是感情好每辟,可當(dāng)我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著干旧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪妹蔽。 梳的紋絲不亂的頭發(fā)上椎眯,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天,我揣著相機與錄音舔稀,去河邊找鬼。 笑死内贮,一個胖子當(dāng)著我的面吹牛汞斧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播粘勒,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼庙睡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起统台,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤啡邑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后谣拣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡拔鹰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年贵涵,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓷马。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡跨晴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出端盆,到底是詐尸還是另有隱情费封,我是刑警寧澤蒋伦,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站痕届,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏锤窑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一果复、第九天 我趴在偏房一處隱蔽的房頂上張望渤昌。 院中可真熱鬧,春花似錦独柑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瑞驱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間唤反,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工肠缨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留盏阶,地道東北人晒奕。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓脑慧,卻偏偏與公主長得像惠窄,于是被迫代替她去往敵國和親漾橙。 傳聞我的和親對象是個殘疾皇子楞卡,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,629評論 2 354

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

  • Java集合類可用于存儲數(shù)量不等的對象,并可以實現(xiàn)常用的數(shù)據(jù)結(jié)構(gòu)如棧,隊列等,Java集合還可以用于保存具有映射關(guān)...
    小徐andorid閱讀 1,939評論 0 13
  • 四蒋腮、集合框架 1:String類:字符串(重點) (1)多個字符組成的一個序列,叫字符串池摧。生活中很多數(shù)據(jù)的描述都采...
    佘大將軍閱讀 752評論 0 2
  • 今日任務(wù)1绢慢、TreeSet介紹(掌握TreeSet集合的應(yīng)用)2灿渴、Comparable 接口介紹(掌握)3胰舆、Com...
    Villain丶Cc閱讀 1,824評論 0 1
  • 1 集合 1.1 集合介紹 ??集合是java中提供的一種容器,可以來存儲多個數(shù)據(jù)棘幸。在前面的學(xué)習(xí)中滨攻,我們知道數(shù)據(jù)多...
    圣堂刺客_x閱讀 306評論 0 0
  • 今日任務(wù) 1、集合框架繼承體系(理解)2光绕、Collection接口介紹(掌握常用Collection方法)3、迭代...
    Villain丶Cc閱讀 908評論 0 12