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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Set接口介绍

發布時間:2025/5/22 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Set接口介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 前言
  • 一、Set接口:
    • 1.Set接口特點:
    • 2.Set的實現類:
    • Set接口提供的方法API:
  • 二、HashSet
    • 1.HashSet的特點:
    • 2.HashSet的屬性:
    • 3.HashSet的構造函數:
    • 4.HashSet方法:
  • 三、LinkedHashSet:
    • 1.LinkedHashSet的特點:
    • 2.LinkedHashSet的繼承關系和構造器:
    • 3、LinkedHastSet的應用場景:
  • 四、TreeSet
    • 1.TreeSet的特點:
    • 2.屬性:
    • 3.構造器方法
  • 總結


前言

Set接口是Collection接口的子類,其繼承了所有方法。那么他有什么獨特的特點呢,下來我們來研究一下Set接口以及她的實現類的特點


提示:以下是本篇文章正文內容,下面案例可供參考

一、Set接口:

1.Set接口特點:

數據是不能重復的、最多可以存儲一個null值

2.Set的實現類:

HashSet、LinkedHashSet和TreeSet

Set接口提供的方法API:

二、HashSet

1.HashSet的特點:

1、HashSet不能保證數據有序 2、HashSet數據是不能重復的 3、HashSet是可以存儲null值

2.HashSet的屬性:

//map屬性是存儲數據的,是HashMap類型的數據 private transient HashMap<E,Object> map; //PRESENT屬性,HashMap中填充的value值 private static final Object PRESENT = new Object();

3.HashSet的構造函數:

調用HashSet的構造函數發現其底層是實現了一個HashMap的

public HashSet() {map = new HashMap<>();}public HashSet(Collection<? extends E> c) {map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));addAll(c);}public HashSet(int initialCapacity, float loadFactor) {map = new HashMap<>(initialCapacity, loadFactor);}public HashSet(int initialCapacity) {map = new HashMap<>(initialCapacity);}

4.HashSet方法:

public boolean add(E e) {return map.put(e, PRESENT)==null;}public boolean remove(Object o) {return map.remove(o)==PRESENT;}public void clear() {map.clear();}

由上面的源碼我們可以發現HashSet底層實現是基于HashMap來實現的,將set中存儲的值作為HashMap的key來處理,PRESENT是一個填充的value值

三、LinkedHashSet:

1.LinkedHashSet的特點:

1、數據有序 2、數據不能重復 3、數據是可以存儲null的

2.LinkedHashSet的繼承關系和構造器:

通過聲明形式可知:其繼承自HashSet,其繼承了HashSet中所有的屬性和方法

public class LinkedHashSet<E> extends HashSet<E>implements Set<E>, Cloneable, java.io.Serializable {public LinkedHashSet(int initialCapacity, float loadFactor) {super(initialCapacity, loadFactor, true);}public LinkedHashSet(int initialCapacity) {super(initialCapacity, .75f, true);}public LinkedHashSet() {super(16, .75f, true);}public LinkedHashSet(Collection<? extends E> c) {super(Math.max(2*c.size(), 11), .75f, true);addAll(c);} }

通過聲明形式可知:其繼承自HashSet,其繼承了HashSet中所有的屬性和方法
構造函數調用父類HashSet中方法如下:

HashSet(int initialCapacity, float loadFactor, boolean dummy) {map = new <>(initialCapacity, loadFactor);}

LinkedHashSet的實現是基于LinkedHashMap來實現的
LinkedHashSet數據有序的特征是基于LinkedHashMap來保證的,其底層利用雙向鏈表來實現的數據有序

3、LinkedHastSet的應用場景:

在去重的基礎上數據有序

四、TreeSet

1.TreeSet的特點:

1、數據自然有序(自定義排序,實現Comparator接口)
2、數據不能重復
3、數據不能為null

2.屬性:

//TreeSet實現類的一共父接口實例用來存儲數據private transient NavigableMap<E,Object> m;//PRESENT屬性,HashMap中填充的value值 private static final Object PRESENT = new Object();

3.構造器方法

通過源碼可知:TreeSet底層是基于treeMap來實現的

TreeSet(NavigableMap<E,Object> m) {this.m = m;}public TreeSet() {this(new TreeMap<>());}public TreeSet(Comparator<? super E> comparator) {this(new TreeMap<>(comparator));}public TreeSet(Collection<? extends E> c) {this();addAll(c);}public TreeSet(SortedSet<E> s) {this(s.comparator());addAll(s);}

總結

當我們學習完Set的接口和他的實現類以后發現他們的實現都是基于對應Map的來實現,他的存在是為了我們只需要進行對單一數據操作來保證數據不重復等特點的使用的。

總結

以上是生活随笔為你收集整理的Set接口介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

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