国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java復習之集合框架Set接口

2019-11-06 08:20:07
字體:
來源:轉載
供稿:網友

這篇博客主要是復習一下java中集合框架Set接口。

1.Set接口

public interface Set extends Collection

一個不包含重復元素的collection。更確切的說,set不包含滿足e1.equals(e2)的元素。對e1和e2,并且最多包含一個null元素。正如其名稱所暗示的,此接口模仿了數學上的set抽象

2.HashSet

public class HashSet extends AbstractSet implements Set,Clonable,Serializable

類實現Set接口,由哈希表(實際上是一個HashMap實例)支持。它不保證set的迭代順序:特別是它不保證該順序的恒久不變。此類允許使用null元素

HashSet注意事項

HashSet實現類: 1.不保證實現順序, 2.默認構造方法底層由HashMap實例的默認初始容量為16,加載因子為0.75 3.加載因子是hashset擴充的條件 4.判斷自定義對象是否相等的時候,要重寫hashCode()和equals()方法哦! HashCode值相同的時候再去調用equals方法,Hashcode值不同的時候則不用調用equals方法。public class Person { PRivate String name; private int age; public Person() { } public Person(String name,int age) { this.name=name; this.age=age; } public int getAge() { return age; } public String getName() { return name; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } @Override public String toString() { return "name:"+name+"age:"+age; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; if (age != person.age) return false; return name != null ? name.equals(person.name) : person.name == null; } @Override public int hashCode() { int result = name != null ? name.hashCode() : 0; result = 31 * result + age; return result; }}public static void hashset() { Set<String> set=new HashSet<String>(); set.add("空空"); set.add("蘭蘭"); set.add("泉彩"); set.add("島愛"); System.out.println("元素的個數是:"+set.size()); //不允許重復 // set.add("空空"); //存儲自定義對象 Set<Person> persons =new HashSet<Person>(); Person p1=new Person("空空",30); Person p2 =new Person("蘭蘭",29); Person p3=new Person("島愛",32); Person p4=new Person("泉彩",28); persons.add(p1); persons.add(p2); persons.add(p3); persons.add(p4); //這樣便可以把值插入進去,因為對象的內存地址不一樣 //為了避免這種情況,我們可以重寫hashcode()和equals()方法 //可以使用系統的自動生成 persons.add(new Person("空空",30)); System.out.println("一共有元素"+persons.size()); }

3.TreeSet

TreeSet是有序的集合

public class TreeSet extends AbstractSet implements NavigableSet,Cloneable,Serializable

基于TreeMap的NavigableSet實現。使用元素的自然排序對元素進行排序,或者根據創建set時提供的Comparator進行排序,具體取決于使用的構造方法

TreeSet注意事項

1.使用元素的自然順序對元素進行排序 2.底層使用TreeMap實現(樹形結構) 3.在TreeSet集合中存儲自定義對象: 該對象必須實現Comparable接口,并且使用這個方法進行排除重復元素

public class Emp implements Comparable<Emp> { private String name; private int age; public Emp() { } public Emp(String name,int age) { this.name=name; this.age=age; } public String getName() { return name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Emp{" + "name='" + name + '/'' + ", age=" + age + '}'; } @Override public int compareTo(Emp o) { if(o==null) { throw new NullPointerException("對象不能為空"); } if(this.age<o.age) { return -1; }else if(this.age>o.age) return 1; return 0; }}public static void treeset() { Set<String> set=new TreeSet<String>(); set.add("空空"); set.add("蘭蘭"); set.add("泉彩"); set.add("島愛"); System.out.println("一共有元素:"+set.size()); //打印treeset中的元素 //toArray()的參數只是告訴程序要返回什么類型的Obj String names[]=set.toArray(new String[]{}); for (String s:names) { System.out.println(s); } System.out.println("=======添加自定義對象========="); Set<Emp> emps = new TreeSet<Emp>(); Emp e1= new Emp("空空",29); Emp e2 = new Emp("蘭蘭",30); Emp e3 = new Emp("島愛",28); Emp e4 =new Emp("泉彩",35); emps.add(e1); emps.add(e2); emps.add(e3); emps.add(e4); //不允許相同的對象 //emps.add(e1); //這個對象還是添加不進去,因為年齡與空空同歲,實際上使用Compare //方法 emps.add(new Emp("利亞",29)); System.out.println("元素的個數為"+emps.size()); }

4.LinkedHashSet

有序

public class LinkedHashSet extends HashSet implement Set,Clonable,Serializable

具有可預知迭代順序的Set接口的哈希表和鏈接鏈表實現。此實現與HashSet的不同在于,LinkedHashSet維護著一個運行于所有條目的雙重鏈接鏈表。此鏈接列表定義了迭代順序,即按照將元素插入到set中的順序(插入順序)進行迭代。注意:插入順序不受在set中重新插入的元素的影響。

LinkedHashSet注意事項:

1.使用哈希表+雙向鏈表實現 2.會以插入的順序輸出 3.底層是使用LinkedHashMap實現 4.是Hashset的子類


上一篇:Java復習之Iterator接口

下一篇:java 反射

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜兰市| 湘阴县| 博乐市| 泸定县| 封丘县| 青浦区| 抚宁县| 镇平县| 江孜县| 乌鲁木齐市| 建水县| 宣化县| 绥化市| 梁河县| 平阳县| 习水县| 腾冲县| 东兴市| 新余市| 绥芬河市| 尼玛县| 涞源县| 阳江市| 临猗县| 米林县| 漠河县| 常德市| 封丘县| 安溪县| 通海县| 龙里县| 长寿区| 师宗县| 方正县| 广平县| 富顺县| 富顺县| 怀集县| 青海省| 和顺县| 阿拉善左旗|