Java之路---Day19(set接口)

set接口java

  java.util.Set 接口和 java.util.List 接口同樣,一樣繼承自 Collection 接口,它與 Collection 接口中的方 法基本一致,可是set接口中元素無序,而且不重複數組

  分類ide

    1.HashSet集合性能

    2.LinkedHashSet集合this

HashSet集合:spa

  java.util.HashSet 是 Set 接口的一個實現類,它所存儲的元素是不可重複的,而且元素都是無序的(即存取順序 不一致)code

 1 package demosummary.set;  2 
 3 import java.util.HashSet;  4 
 5 public class HashSetTest01 {  6     public static void main(String[] args) {  7         //建立set集合
 8         HashSet<String> set = new HashSet<>();  9         //添加元素
10         set.add("德瑪"); 11         set.add("德邦"); 12         set.add("皇子"); 13         set.add("劍聖"); 14         set.add("德瑪"); 15         System.out.println(set);//[德邦, 皇子, 德瑪, 劍聖]//元素不容許重複,且無序 16         //遍歷集合
17         for (String s : set) { 18  System.out.println(s); 19  } 20  } 21 }

  HashSet 是根據對象的哈希值來肯定元素在集合中的存儲位置,所以具備良好的存取和查找性能。保證元素惟一性 的方式依賴於: hashCode 與 equals 方法對象

HashSet集合存儲數據的結構(哈希表)blog

  哈希表是由數組+鏈表+紅黑樹(JDK1.8增長了紅黑樹部分)實現的,以下圖所示繼承

  

  

HashSet存儲自定義類型元素

  HashSet中存放自定義類型元素時,須要重寫對象中的hashCode和equals方法,創建本身的比較方式,才能保 證HashSet集合中的對象惟一 

 1 package demosummary.set;  2 
 3 import java.util.Objects;  4 
 5 public class SetPerson {  6     private String name;  7     private int age;  8 
 9     public SetPerson() { 10  } 11 
12     public SetPerson(String name, int age) { 13         this.name = name; 14         this.age = age; 15  } 16 
17     public String getName() { 18         return name; 19  } 20 
21     public void setName(String name) { 22         this.name = name; 23  } 24 
25     public int getAge() { 26         return age; 27  } 28 
29     public void setAge(int age) { 30         this.age = age; 31  } 32 
33  @Override 34     public boolean equals(Object o) { 35         if (this == o) return true; 36         if (o == null || getClass() != o.getClass()) return false; 37         SetPerson setPerson = (SetPerson) o; 38         return age == setPerson.age &&
39  Objects.equals(name, setPerson.name); 40  } 41 
42  @Override 43     public int hashCode() { 44         return Objects.hash(name, age); 45  } 46 
47  @Override 48     public String toString() { 49         return "SetPerson{" +
50                 "name='" + name + '\'' +
51                 ", age=" + age +
52                 '}'; 53  } 54 }
 1 package demosummary.set;  2 
 3 import java.util.HashSet;  4 
 5 public class SetPersonTest {  6     public static void main(String[] args) {  7         //建立set集合
 8         HashSet<SetPerson> sp = new HashSet<>();  9         //添加元素
10         SetPerson setPerson = new SetPerson("德瑪",18); 11  sp.add(setPerson); 12         sp.add(new SetPerson("德邦", 19)); 13         sp.add(new SetPerson("皇子", 20)); 14         sp.add(new SetPerson("劍聖", 19)); 15         //遍歷set集合
16         for (SetPerson person : sp) { 17  System.out.println(person); 18  } 19         /**
20  * 執行結果 21  * SetPerson{name='皇子', age=20} 22  * SetPerson{name='德瑪', age=18} 23  * SetPerson{name='德邦', age=19} 24  * SetPerson{name='劍聖', age=19} 25          */
26  } 27 }

LinkedHashSet

  HashSet的一個子類 java.util.LinkedHashSet ,它是鏈表和哈希表組合的一個數據存儲結構,保證取出元素是有序的

 1 package demosummary.set;  2 
 3         import java.util.Iterator;  4         import java.util.LinkedHashSet;  5         import java.util.LinkedList;  6 
 7 public class LinkedHashSetTest01 {  8     public static void main(String[] args) {  9         //建立LinkedList集合
10         LinkedHashSet<String> set = new LinkedHashSet<>(); 11         //添加元素
12         set.add("劍聖"); 13         set.add("德瑪"); 14         set.add("皇子"); 15         set.add("德邦"); 16         //迭代器輸出結果
17         Iterator<String> iterator = set.iterator(); 18         while (iterator.hasNext()) { 19  System.out.println(iterator.next()); 20  } 21         /**
22  * 輸出結果 23  * 劍聖 24  * 德瑪 25  * 皇子 26  * 德邦 27          */
28  } 29 }

可變參數

  若是咱們定義一個方法須要接受多個參數,而且多個參數類型一致,咱們能夠對其簡化成以下格 式:

  修飾符 返回值類型 方法名(參數類型... 形參名){  }

  等價於

  修飾符 返回值類型 方法名(參數類型[] 形參名){  }

 1 package demosummary.set;  2 
 3 public class SetTest {  4     public static void main(String[] args) {  5         //定義一個數組
 6         int[] arr = {1,5,8,66,88,345};  7         //定義一個結果並賦值
 8         int sum = getSum(arr);//調用方法並給sum賦值  9         //輸出結果
10  System.out.println(sum); 11  } 12 
13     /**
14  * 完成數組  全部元素的求和 原始寫法 15  * public static int getSum(int[] arr){ 16  * int sum = 0; 17  * for(int a : arr){ 18  * sum += a; 19  * } 20  * return sum; 21  * } 22      */
23     //可變參數寫法
24     public static int getSum(int[] arr){ 25         //定義一個sum參數
26         int sum = 0; 27         //加強for
28         for (int i : arr) { 29             //得出結果
30             sum += i; 31  } 32         //返回結果
33         return sum; 34  } 35 }
相關文章
相關標籤/搜索