本篇文章為大家帶來了關於java的相關知識,其中主要介紹了關於set集合的相關問題,set集合的特點是無序、不重複並且沒有索引,下面一起來看一下,希望對大家有幫助。
推薦學習:《java影片教學》
Set系類別集合特點:
- 無序:存取順序不一致
- 不重複:可以移除重複
- 無索引:沒有索引的方法,所以不能使用普通for迴圈遍歷,也不能透過索引來取得元素
Set集合實作類別特性:
HashSet:無序、不重複、無索引
LinkedHashSet:有序、不重複、無索引
TreeSet:排序、不重複、無索引
Set集合的功能上基本上與Collection的API一致。
HashSet集合
HashSet集合:
Set<string> set = new HashSet(); set.add("石原里美"); set.add("石原里美"); set.add("工藤静香"); set.add("朱茵"); System.out.println(set); set.remove("朱茵"); System.out.println(set);</string>
輸出結果:
透過上述程式碼與運行結果,我們可以清楚看出,HashSet集合無序、不重複的特性;
結合上述圖所示,可以看出HashSet集合是無法透過get()方法的索引取得資料的,並且在刪除集合中的資料的時候,也只能透過定向的對資料進行刪除。
LinkedHashSet集合:
LinkedHashSet集合:
Set<string> set = new LinkedHashSet(); set.add("石原里美"); set.add("石原里美"); set.add("工藤静香"); set.add("朱茵"); System.out.println(set); set.remove("朱茵"); System.out.println(set);</string>
輸出結果:
透過上述程式碼與輸出結果做對比,即可看出無序與有序之間的區別,前者是會將傳入的數據順序打亂,而後者則是仍然按照輸入數據的順序存儲數據,因此輸出的時候是有序狀態。
TreeSet集合:
TreeSet集合:
Set<integer> set = new TreeSet(); set.add(13); set.add(23); set.add(23); set.add(11); System.out.println(set); set.remove(23); System.out.println(set);</integer>
輸出結果:
透過上述程式碼和輸出結果我們可以用字面意思去理解為什麼TreeSet的特點是排序了,即將儲存的資料按照Java預設的排序方式進行排序。
然而此時若儲存自訂如People對象,TreeSet無法直接排序,會出現錯誤的狀況!
//People类: public class People{ private String name; private int age; private String classroom; public People(){ } public People(String name, int age, String classroom) { this.name = name; this.age = age; this.classroom = classroom; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getClassroom() { return classroom; } public void setClassroom(String classroom) { this.classroom = classroom; } @Override public String toString() { return "People{" + "name='" + name + '\'' + ", age=" + age + ", classroom='" + classroom + '\'' + '}'; } } //main方法: public static void main(String[] args) { Set<people> p = new TreeSet(); p.add(new People("张三",19,"智能")); p.add(new People("李四",18,"数据库")); p.add(new People("王五",20,"渗透")); System.out.println(p); }</people>
若想解決該問題,我們就需要為TreeSet集合自訂儲存類型,現有兩種方式可以解決該問題:一種是自訂類別實作Comparable介面並重寫裡面的compareTo方法指定規則;另一種則是集合自帶比較器物件進行規則定義。
方式一:自訂類別實作Comparable介面重寫裡面的compareTo方法指定比較規則(多餘無關緊要的程式碼在此不再贅述了,只展示重要的那部分程式碼)
//改变的第一个地方:实现Comparable类 public class People implements Comparable<people> { //改变的第二个地方:重写Comparable类中的compareTo方法 @Override public int compareTo(People o) { return this.age-o.age; } }</people>
輸出結果(根據年齡進行比較):
#在重寫的方法中,return後面的程式碼決定了該物件將要根據什麼準則進行比較,比較規則如下:
- 如果認為第一個元素大於第二個元素返回正整數即可
- 如果認為第一個元素小於第二個元素傳回負整數即可
- 若認為第一個元素等於第二個元素回傳0即可,此時Treeset集合只會保留一個元素,認為兩者重複
方式二:集合自帶比較器物件進行規則定義
Set<people> p = new TreeSet(new Comparator<people>() { @Override public int compare(People o1, People o2) { return o1.getAge()-o2.getAge(); } });</people></people>
在原來的基礎之上對集合的創建作出改變,並且其比較準則與前面的定義方法類似,相對前面的方式,這種方式會更方便快速一些。在此,我們也可以回顧一些前面所學到的知識“Lambda表達式”,對給程式碼區塊進行化簡。
Set<people> p = new TreeSet((o1, o2) -> o1.getAge()-o2.getAge());</people>
如果沒有學習Lambda表達式,或者說是對Lambda表達式的知識不清晰,那麼可以看Java中的lambda表達式如何理解——精簡這篇文章的講解,或許會對你有幫助的。
推薦學習:《java影片教學》
以上是Java中的set集合如何理解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

Atom編輯器mac版下載
最受歡迎的的開源編輯器

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

禪工作室 13.0.1
強大的PHP整合開發環境

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中