真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java入門(mén)Day10:Set集合-創(chuàng)新互聯(lián)

1. Set 接口

1.無(wú)序(添加和取出的順序不一致)
2.不允許重復(fù)元素,所以最多包含一個(gè)null
3.JDK API中的Set接口的實(shí)現(xiàn)類(lèi)有很多,主要有TreeSet和HashSet兩個(gè)

創(chuàng)新互聯(lián)是少有的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)、營(yíng)銷(xiāo)型企業(yè)網(wǎng)站、微信小程序、手機(jī)APP,開(kāi)發(fā)、制作、設(shè)計(jì)、外鏈、推廣優(yōu)化一站式服務(wù)網(wǎng)絡(luò)公司,2013年開(kāi)創(chuàng)至今,堅(jiān)持透明化,價(jià)格低,無(wú)套路經(jīng)營(yíng)理念。讓網(wǎng)頁(yè)驚喜每一位訪客多年來(lái)深受用戶(hù)好評(píng)
  • Set接口的實(shí)現(xiàn)類(lèi)的對(duì)象(Set接口對(duì)象),不能存活重復(fù)的元素,。
  • 存放數(shù)據(jù)是無(wú)序的,添加和取出的順序無(wú)關(guān),但每次取出的順序是一樣的,下次取出的順序不會(huì)改變。
  • 底層是由數(shù)組加鏈表的形式實(shí)現(xiàn)的。
  • Set的遍歷可以使用迭代器。
  • Set的常用方法和List相似。
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class Demo01 {public static void main(String[] args) {Set set = new HashSet();
        set.add("jack");
        set.add("lucy");
        set.add("john");
        set.add("jack");
        set.add(null);
        System.out.println(set);

        //迭代器遍歷
        Iterator iterator = set.iterator();
        while (iterator.hasNext()) {Object next = iterator.next();
            System.out.println(next);
        }

        //增強(qiáng)for循環(huán)
        for (Object o: set) {System.out.println(o);
        }
        //set接口對(duì)象,不能通過(guò)索引來(lái)獲取,因此不能用普通for循環(huán)來(lái)遍歷
    }
}
2. HashSet 集合 2.1 底層實(shí)現(xiàn)
  • HashSet的底層其實(shí)HashMap
  • HashSet的元素的順序是hash后索引的結(jié)果
  • 先獲取元素的哈希值(hashCode方法)
    對(duì)哈希值進(jìn)行運(yùn)算,得到一個(gè)索引值,即為要存放在哈希表中的索引。
    如果該位置沒(méi)有其他元素,直接存放;
    如果有其他元素,則進(jìn)行equals判斷,如果相等,則不再添加。如果不相等,則以鏈表的方式添加。
    當(dāng)一條鏈表的元素個(gè)數(shù)超過(guò)TREEIFY_THRESHOLD(默認(rèn)是8),并且table的大小>=MIN_TREEIFY_CAPACITY(默認(rèn)是64),就會(huì)進(jìn)行樹(shù)化(紅黑樹(shù))。
    當(dāng)每次擴(kuò)容時(shí),會(huì)重新進(jìn)行hash排序,node空間在數(shù)組中的排序會(huì)變化。
    向hashset加入一個(gè)元素時(shí),Node加入table,size就增加1,并不是占用12個(gè)數(shù)組元素才擴(kuò)容。
2.2 例子
  • 定義一個(gè)Employee類(lèi),該類(lèi)包含:private成員屬性name,age,birthday(MyDate類(lèi)型),其中birthday為MyDate類(lèi)型(屬性包括:year,month,day),要求:
    1.創(chuàng)建3個(gè)Employee放入HashSet中
    2.當(dāng)name和birthday的值相同時(shí),認(rèn)為是相同員工,不能添加到HashSet集合中
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;

public class Demo01 {public static void main(String[] args) {Employee employee1 = new Employee("曹操",42,new Employee.MyDate(112,4,7));
        Employee employee2 = new Employee("劉備",33,new Employee.MyDate(121,7,9));
        Employee employee3 = new Employee("劉備",33,new Employee.MyDate(121,7,9));

        HashSet hashSet = new HashSet();
        hashSet.add(employee1);
        hashSet.add(employee2);
        hashSet.add(employee3);
        System.out.println(hashSet);
        System.out.println(hashSet);
    }

static class Employee{private String name;
        private int age;
        private MyDate birthday;

    public Employee(String name, int age, MyDate birthday) {this.name = name;
        this.age = age;
        this.birthday = birthday;
    }

    public String getName() {return name;
    }

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

    public int getAge() {return age;
    }

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

    public MyDate getBirthday() {return birthday;
    }

    public void setBirthday(MyDate birthday) {this.birthday = birthday;
    }

    @Override
    public boolean equals(Object o) {if (this == o) return true;
        if (!(o instanceof Employee)) return false;
        Employee employee = (Employee) o;
        return age == employee.age && Objects.equals(name, employee.name) && Objects.equals(birthday, employee.birthday);
    }

    @Override
    public int hashCode() {return Objects.hash(name, age, birthday);
    }

    @Override
    public String toString() {return "Employee{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", birthday=" + birthday +
                '}';
    }

    public static class MyDate {int year;
        int month;
        int day;
        public MyDate(int year, int month, int day) {this.year = year;
            this.month = month;
            this.day = day;
        }

        @Override
        public boolean equals(Object o) {if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            MyDate myDate = (MyDate) o;
            return year == myDate.year && month == myDate.month && day == myDate.day;
        }

        @Override
        public int hashCode() {return Objects.hash(year, month, day);
        }

        @Override
        public String toString() {return  year +
                    "年" + month +
                    "月" + day +
                    "日";
        }
    }
}
}
3. LinkedHashSet 集合

在LinkHashSet中維護(hù)了一個(gè)hash表和雙向鏈表,不同于hashSet中的鏈表,LinkHashSet中的鏈表是可以跨數(shù)組元素變量空間的雙向鏈表
雙向鏈表是有head和tail的,它的順序是我們添加元素的順序,這樣我們遍歷LinkedHashSet時(shí),就能使遍歷順序和插入順序一致。

3.1 例子
  • 建立一個(gè)Car類(lèi),包含name,price兩種屬性,如果name和price一樣,則認(rèn)為是相同元素,就不能添加。
import java.util.LinkedHashSet;
import java.util.Objects;

public class Demo01 {public static void main(String[] args) {LinkedHashSet linkedHashSet = new LinkedHashSet();
        linkedHashSet.add(new Car("A8",700000));
        linkedHashSet.add(new Car("A8",700000));
        linkedHashSet.add(new Car("C100",1100000));
        linkedHashSet.add(new Car("AE86",100000));
        System.out.println(linkedHashSet);

    }
}
class Car{private String name;
    private int price;

    public Car(String name, int price) {this.name = name;
        this.price = price;
    }

    public String getName() {return name;
    }

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

    public int getPrice() {return price;
    }

    public void setPrice(int price) {this.price = price;
    }

    @Override
    public boolean equals(Object o) {if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Car car = (Car) o;
        return price == car.price && Objects.equals(name, car.name);
    }

    @Override
    public int hashCode() {return Objects.hash(name, price);
    }

    @Override
    public String toString() {return "Car{" +
                "name='" + name + '\'' +
                ", price=" + price +
                '}';
    }
}

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧


網(wǎng)頁(yè)題目:Java入門(mén)Day10:Set集合-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://weahome.cn/article/idggh.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部