日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java容器---Set: HashSet TreeSet LinkedHashSet

發布時間:2024/7/19 java 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java容器---Set: HashSet TreeSet LinkedHashSet 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.Set接口概述

?????? Set 不保存重復的元素(如何判斷元素相同呢?)。如果你試圖將相同對象的多個實例添加到Set中,那么它就會阻止這種重復現象。 Set中最常被使用的是測試歸屬性,你可以很容易地詢問某個對象是否在某個Set中。 正因如此,查找就成為了Set中最重要的操作,因此你通常都會選擇一個HashSet 的實現,它專門對快速查找進行了優化。

??????? Set具有與Collection完全一樣的接口,因此沒有任何額外的功能,不像前面的List。實際上Set就是Collection,只是行為不同。(這是繼承與多態思想的典型應用:表現不同的行為)。Set 是基于對象的值來確定歸屬性的。

java.util Interface Set<E>

參數類型 E? : 由此集合維護的元素的類型所有超類接口:Collection <E>, Iterable <E>所有子類接口:NavigableSet <E>, SortedSet <E>所有已知實現類: AbstractSetConcurrentHashMap.KeySetViewConcurrentSkipListSetCopyOnWriteArraySetEnumSet ,??HashSetJobStateReasonsLinkedHashSetTreeSet

2.Set常用實現類

(1)HashSet

???? HashSet繼承AbstractSet類,實現Set、Cloneable、Serializable接口。由哈希表支持(實際上是一個HashMap實例,基于

HashMap來實現的,底層采用HashMap來保存元素。),天生就是為了提高查找效率的。

????????????????

?

構造方法

所有方法

(2)TreeSet

? ?? TreeSet 繼承AbstractSet類,實現NavigableSet、Cloneable、Serializable接口。與HashSet是基于HashMap實現一樣,TreeSet 同樣是基于TreeMap 實現的。由于得到Tree 的支持,TreeSet 最大特點在于排序,它的作用是提供有序的Set集合。

參數類型
????? E - 由此集合維護的元素的類型
All Implemented Interfaces(實現接口):
SerializableCloneableIterable <E>,Collection <E>,NavigableSet <E>
??? Set <E>? SortedSet <E>

構造方法

常用方法

(3)LinkedHashSet

????? LinkedHashSet 綜合了鏈表+哈希表,根據元素的hashCode值來決定元素的存儲位置,它同時使用鏈表維護元素的次序。

????? 當遍歷該集合時候,LinkedHashSet 將會以元素的添加順序訪問集合的元素。

????? 對于 LinkedHashSet 而言,它繼承與 HashSet、又基于 LinkedHashMap 來實現的。

public class LinkedHashSet<E> extends HashSet<E>
implements Set<E>,Cloneable,Serializable
參數類型E ---由此集合維護的元素的類型 All Implemented Interfaces(實現接口):
SerializableCloneableIterable <E>, Collection <E>, Set <E>??????????????

構造方法

方法(基本都是繼承方法)

3.set演示

(1)HashSet

1 public class HashSetDemo { 2 3 /** 4 * @param args 5 */ 6 public static void main(String[] args) { 7 8 //1,創建一個Set容器對象。 9 Set set = new HashSet();//如果該成LinkedHashSet,可實現有序。 10 11 //2,添加元素。 12 set.add("abc"); 13 set.add("nba"); 14 set.add("heihei"); 15 set.add("haha"); 16 set.add("heihei"); 17 18 //3,只能用迭代器取出。 19 for (Iterator it = set.iterator(); it.hasNext();) { 20 System.out.println(it.next()); 21 } 22 23 } 24 25 } 26

(2)TreeSet?

1 public class TreeSetDemo2 { 2 3 /** 4 * @param args 5 */ 6 public static void main(String[] args) { 7 8 //初始化TreeSet集合明確一個比較器。 9 Set set = new TreeSet(new ComparatorByName()); 10 11 set.add(new Student("xiaoqiang",20)); 12 set.add(new Student("daniu",24)); 13 set.add(new Student("xiaoming",22)); 14 set.add(new Student("tudou",18)); 15 set.add(new Student("daming",22)); 16 set.add(new Student("dahuang",19)); 17 18 for (Iterator it = set.iterator(); it.hasNext();) { 19 Student stu = (Student)it.next(); 20 System.out.println(stu.getName()+"::"+stu.getAge()); 21 } 22 } 23 24 } 25 /**/ 26 * 自定義一個比較器,用來對學生對象按照姓名進行排序。 27 * @author Administrator 28 * 29 */ 30 public class ComparatorByName extends Object implements Comparator { 31 32 @Override 33 public int compare(Object o1, Object o2) { 34 35 Student s1 = (Student)o1; 36 Student s2 = (Student)o2; 37 38 int temp = s1.getName().compareTo(s2.getName()); 39 40 return temp==0?s1.getAge()-s2.getAge():temp; 41 } 42 43 } 44 / 45 public class Student implements Comparable { 46 47 private String name; 48 private int age; 49 50 public Student() { 51 super(); 52 53 } 54 public Student(String name, int age) { 55 super(); 56 this.name = name; 57 this.age = age; 58 } 59 60 61 62 /** 63 * 覆蓋hashCode方法。根據對象自身的特點定義哈希值。 64 */ 65 public int hashCode(){ 66 final int NUMBER = 37; 67 return name.hashCode() + age*NUMBER; 68 } 69 70 /** 71 * 需要定義對象自身判斷內容相同的依據。覆蓋equals方法。 72 * 73 */ 74 public boolean equals(Object obj){ 75 76 if(this == obj){ 77 return true; 78 } 79 80 if(!(obj instanceof Student)){ 81 throw new ClassCastException("類型錯誤"); 82 } 83 84 Student stu = (Student)obj; 85 86 return this.name.equals(stu.name)&& this.age == stu.age; 87 } 88 89 public String getName() { 90 return name; 91 } 92 public void setName(String name) { 93 this.name = name; 94 } 95 public int getAge() { 96 return age; 97 } 98 public void setAge(int age) { 99 this.age = age; 100 } 101 @Override 102 public String toString() { 103 return "Student [name=" + name + ", age=" + age + "]"; 104 } 105 /** 106 * 學生就具備了比較功能。該功能是自然排序使用的方法。 107 * 自然排序就年齡的升序排序為主。 108 */ 109 @Override 110 public int compareTo(Object o) { 111 112 Student stu = (Student)o; 113 // System.out.println(this.name+":"+this.age+"........"+stu.name+":"+stu.age); 114 /* 115 if(this.age>stu.age) 116 return 1; 117 if(this.age<stu.age) 118 return -1; 119 return 0; 120 */ 121 122 /* 123 * 既然是同姓名同年齡是同一個人,視為重復元素,要判斷的要素有兩個。 124 * 既然是按照年齡進行排序。所以先判斷年齡。在判斷姓名。 125 */ 126 int temp = this.age - stu.age; 127 128 return temp==0?this.name.compareTo(stu.name):temp; 129 130 } 131 132 133 } 134

?

2018-01-05

內容來自API1.8、Java編程思想、傳智播客課程

轉載于:https://www.cnblogs.com/zhuweiheng/p/8203763.html

總結

以上是生活随笔為你收集整理的Java容器---Set: HashSet TreeSet LinkedHashSet的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。