Java集合:關于 TreeSet 的內容盤點

TreeSet() 是使用二叉樹的原理對新 add() 的對象按照指定的順序排序(升序、降序),每增加一個對象都會進行排序,將對象插入的二叉樹指定的位置;
~
本篇內容包括:TreeSet 概述、TreeSet 的使用以及其他知識點


文章目錄

    • 一、TreeSet 概述
    • 二、TreeSet 的使用
        • 1、構造方法
        • 2、常用方法
    • 三、其他知識點
        • 1、關于 HashSet、LinkedHashSet 和 TreeSet 的區別
        • 2、關于 紅黑樹的特點
        • 3、關于 TreeSet 和 TreeMap 的區別


一、TreeSet 概述

TreeSet() 是使用二叉樹的原理對新 add() 的對象按照指定的順序排序(升序、降序),每增加一個對象都會進行排序,將對象插入的二叉樹指定的位置;

Integer 和 String 對象都可以進行默認的 TreeSet 排序,而自定義類的對象是不可以的,自己定義的類必須實現 Comparable 接口,并且覆寫相應的 compareTo() 函數,才可以正常使用;在覆寫 compare() 函數時,要返回相應的值才能使 TreeSet 按照一定的規則來排序

比較此對象與指定對象的順序。如果該對象小于、等于或大于指定對象,則分別返回負整數、零或正整數

TreeSet 的作用是保存無重復的數據,不過還對這些數據進行了排序。TreeMap 的底層是通過紅黑樹實現的,所以 TreeSet 底層也是通過紅黑樹實現的。TreeSet 最主要的特點就是對元素進行了排序。其特點如下:

  • TreeSet 是基于 TreeMap 的 NavigableSet 實現;
  • TreeSet 的元素存儲在 TreeMap 中的 key 中,TreeMap 的 value 是一個常量對象;
  • 非線程安全;
  • java8 新增分割器 spliterator() 方法

二、TreeSet 的使用

1、構造方法

方法名方法說明方法名方法說明
public TreeSet()無參構造方法,完成 map 的創建;public TreeSet(Comparator<? super E> comparator)構造TreeSet,根據指定的比較器進行排序
public TreeSet(Collection<? extends E> c)構造一個包含指定集合中的元素的TreeSet,根據其元素的自然排序進行比較public TreeSet(SortedSet<E> s)構造TreeSet,并使用與指定排序集相同的順序

2、常用方法

方法名方法說明方法名方法說明
boolean add(E e)添加一個元素,如果該元素已經存在,則返回true,如果不存在,則返回falseboolean addAll(Collection<? extends E> c)添加一個包含指定元素的集合
boolean remove(Object o)hashSet的迭代器void clear()獲得大小
NavigableSet<E> headSet(E toElement, boolean inclusive)返回子 SetNavigableSet<E> tailSet(E fromElement, boolean inclusive)返回Set的尾部,范圍是:從fromElement到結尾。
E first()返回Set的第一個元素E last()返回Set的最后一個元素
E lower(E e)返回Set中小于e的最大元素E floor(E e)返回Set中小于/等于e的最大元素
E ceiling(E e)返回Set中大于/等于e的最小元素E higher(E e)返回Set中大于e的最小元素
E pollFirst()獲取第一個元素,并將該元素從TreeMap中刪除E pollLast()獲取最后一個元素,并將該元素從TreeMap中刪除
void writeObject(java.io.ObjectOutputStream s)將TreeSet的“比較器、容量,所有的元素值”都寫入到輸出流中void readObject(java.io.ObjectInputStreams)從輸入流中讀取TreeSet的“比較器、容量,所有的元素值”

三、其他知識點

1、關于 HashSet、LinkedHashSet 和 TreeSet 的區別

  • HashSet 是 Set 接口的主要實現類 ,HashSet 的底層是 HashMap,線程不安全的,可以存儲 null 值;
  • LinkedHashSet 是 HashSet 的子類,能夠按照添加的順序遍歷;
  • TreeSet 底層使用紅黑樹,能夠按照添加元素的順序進行遍歷,排序的方式可以自定義。

2、關于 紅黑樹的特點

  • 性質 1:每個節點要么是紅色,要么是黑色。
  • 性質 2:根節點永遠是黑色的。
  • 性質 3:所有的葉節點都是空節點(即 null),并且是黑色的。
  • 性質 4:每個紅色節點的兩個子節點都是黑色。(從每個葉子到根的路徑上不會有兩個連續的紅色節點)
  • 性質 5:從任一節點到其子樹中每個葉子節點的路徑都包含相同數量的黑色節點。

3、關于 TreeSet 和 TreeMap 的區別

TreeMap 和 TreeSet 是 Java Collection Framework 的兩個重要成員,其中 TreeMap 是 Map 接口的常用實現類,而 TreeSet 是 Set 接口的常用實現類。雖然 TreeMap 和TreeSet 實現的接口規范不同,但 TreeSet 底層是通過 TreeMap 來實現的(如同HashSet底層是是通過HashMap來實現的一樣),因此二者的實現方式完全一樣。而 TreeMap 的實現就是紅黑樹算法

不同點:

  • 最主要的區別就是 TreeSet 和 TreeMap 分別實現 Set 和 Map 接口
  • TreeSet 只存儲一個對象,而 TreeMap存 儲兩個對象 Key 和 Value(僅僅key對象有序)
  • TreeSet 中不能有重復對象,而 TreeMap 中可以存在
  • TreeMap 的底層采用紅黑樹的實現,完成數據有序的插入,排序。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535527.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535527.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535527.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python求素數

口求100內的素數 -個數能被從2開始到自己的平發根的正整數整數整除,就是合數 import math n100 for X in range(2, n): for i in range(2, math.ceil(math.sqrt(x))): if x %i 0: break else: print(x)口求100內的素數 合數一定可以分解為幾個質數的乘積 import math n100 pri…

svn鉤子腳本

REP0S"$1" REV"$2"export LANGen_US.UTF-8 LOGPATH"/app/log" [ !-d ${LOGPATH}] && mkdir $[LOGPATH) -p #update content from svn↓14 SVN/usr/bin/svn↓ SVN update --username test --password test /data/ if[ $? -eq ] then /us…

shell判斷字符串是否為數字

#1.組合語法判斷1: [ -n "echo $num|sed s/[0-9]//g" -a -n "echo $2|sed s/[0-9]//g"] &&\echo”兩個參數都必須為數字”&& exit 1#2.組合語法判斷2:[ -n "echo $num|sed s/[0-9]//g" -a -n "echo $2|sed s/[0-9]//g&…

MySQL:DQL 數據查詢語句盤點

本篇內容包括&#xff1a;DQL 的簡介、SELECT 語句、WHERE 條件語句、JOIN 連接查詢(多表查詢)和分組、過濾、排序、分頁、子查詢的使用。 一、DQL 簡介 DQL&#xff08;Data QueryLanguage&#xff09;語句&#xff0c;即數據查詢語句 常用的語句關鍵字有&#xff1a;SELECT…

MySQL:DML 數據操作語句盤點

本篇內容包括&#xff1a;DML 的簡介、INSERT 命令、UPDATE 命令、DELETE 命令以及 TRUNCATE 命令的使用。 一、DML 簡介 DML&#xff08;Data Manipulation Language&#xff09;語句&#xff0c;即數據操作語句&#xff0c;用于操作數據庫對象中所包含的數據。 常用關鍵字包…

MySQL:DDL 數據定義語句盤點

本篇內容包括&#xff1a;DDL 的簡介、SHOW 查看語句、CREATE 創建語句、ALTER 修改語句以及 DROP 刪除語句的使用。 一、DDL 簡介 DDL&#xff08;Data Definition Language&#xff09;&#xff0c;即數據定義語句&#xff0c;功能就是定義數據庫DATabase、表table、索引ind…

MySQL:DCL 數據控制語句盤點

本篇內容包括:DCL 簡介、GRANT、REVOKE、COMMIT、ROLLBACK、SAVEPOINT、LOCK命令的使用。 一、DCL 簡介 DCL&#xff08;Data Control Language&#xff09;語句&#xff0c;即數據控制語句&#xff0c;用于設置或更改數據庫用戶或角色權限的語句 常用關鍵字包括&#xff1a;…

oracle遷移父子數據

現有需求如下&#xff0c;業務組織單元表中id字段數據在另外一個系統全部重復&#xff0c;但需要將此業務單元組織導入另一系統 業務組織單元表Isc_Specialorg_Unit 表中存在ID字段為子節點數據&#xff0c;parent_id為父節點數據&#xff0c;orgpath為組織路徑 現在做如下操…

批量更新數據庫數據

"update isc22.isc_user t set t.saphrid "&E1&"where t.id "&B1&";"

oracle控制文件

控制文件是數據庫里面非常重要的一類文件,它記錄了當前實例連接的數據庫的結構和行為&#xff0c;并維護數據庫的一致性。 初始化參數文件中描述其位置&#xff0c;很小的:二進制文件,一般不要超過100mmount讀open一直在用 控制文件只能連接一個database丟失要恢復 …

oracle表空間

概念 表空間和數據文件 ●表空間是邏輯存儲概念&#xff0c;一個表空間是一個或多個數據文件的邏輯集合 ●存儲對象(表、索引)邏輯的存儲在表空間上&#xff0c;而存儲對象的數據物理的存放在數據文件上 ●數據庫至少需要一個叫做system的表空間&#xff0c;也就是系統表空間 ●…

oracle日志

日志分類 redo log files聯機日志或重做日志 archived log files歸檔日志 1184198alert log files 告警日志 trace files user_ _dump_ _dest 用戶信息日志如跟蹤會話日志 background dump_ dest進程日志還有其他一-些不常用的日志 v$database的log_mode 數據庫歸檔模式…

MySQL:分庫分表知識點盤點

本篇內容包括&#xff1a;數據庫瓶頸、分庫分表以及分庫分表相關問題 一、數據庫瓶頸 不管是IO瓶頸&#xff0c;還是CPU瓶頸&#xff0c;最終都會導致數據庫的活躍連接數增加&#xff0c;進而逼近甚至達到數據庫可承載活躍連接數的閾值。在業務Service來看就是&#xff0c;可用…

oracle的sga

sga SGA的管理 ■有三種方式&#xff1a; ●8i:SGA的總大小由所有內存組件大小之和決定&#xff0c;不能直接定義SCA大小。對內部組件大小的修改必須在數據庫重起 后 才能生為&#xff0c;所以叫做SGA的靜態管理。 ●9i&#xff…

MySQL:日志知識點盤點

本篇內容包括&#xff1a;binlog&#xff08;二進制日志&#xff09;、redo log 以及 undo log 一、binlog&#xff08;二進制日志&#xff09; binlog 用于記錄數據庫執行的寫入性操作(不包括查詢)信息&#xff0c;以二進制的形式保存在磁盤中。binlog是mysql的邏輯日志&…

ROWNUM的使用

一個偽列看起來像是一個表中的列&#xff0c;但實際上并不保存在表中。你可以查詢&#xff0c; 但是不能插入&#xff0c;修改和刪除其中的值。一個偽列也類似于一個沒有參數的函 數。但是在典型情況下&#xff0c;在結果集中可以為每一行返回相同的值&#xff0c;而偽列通 常為…

MySQL:主從相關知識點盤點

本篇內容包括&#xff1a;MySQL 主從復制簡介、主從復制的原理以及主從搭建 一、MySQL 主從復制簡介 在實際的生產中&#xff0c;為了解決Mysql的單點故障已經提高MySQL的整體服務性能&#xff0c;一般都會采用**「主從復制」**。 比如&#xff1a;在復雜的業務系統中&#x…

oracle導出expdp

expdp/impdp 是 oracle 10g 版本后推出的服務器端工具--數據泵&#xff0c;作用是為了將數據庫中的邏輯對象&#xff0c;比如表、用戶、全庫、表空間進 行導入&#xff0c;導出 命令解析 ATTACH ATTACH [[schema_name.]job_name] schema_name 表示用戶名,job_name 表示導出的作…

oracle導入impdp

expdp/impdp 是 oracle 10g 版本后推出的服務器端工具--數據泵&#xff0c;作用是為了將數據庫中的邏輯對象&#xff0c;比如表、用戶、全庫、表空間進 行導入&#xff0c;導出REMAP_DATAFILE 該選項用于將源數據文件名轉變為目標數據文件名, 在不同平臺之間搬移表空間時可能需…

oracle高水位線

ORACLE在邏輯存儲上分4個粒度: 表空間, 段, 區 和 塊. 1.1 塊: 是粒度最小的存儲單位,現在標準的塊大小是8K,ORACLE每一次I/O操作也是按塊來操作的,也就是說當ORACLE從數據文件讀數據時,是讀取多少個塊,而不是多少行. 每一個Block里可以包含多個row. 1.2 區:…