集合TreeSet【java】
TreeSet:能夠對元素按照某種規則進行排序。
TreeSet排序方式:TreeSet是構造了一個二叉樹,如果大於就在右子數,小於就在左子樹,等於就不用管
排序有兩種方式A:自然排序B:比較器排序
TreeSet的特點:排序和唯一
建立無參構造的TreeSet物件的排序方式是自然排序
建立帶參構造的TreeSet物件的排序方式是比較器排序
自定義:建立集合物件時是無參構造
如果一個類進行自然排序,那麼這個類就要實現自然排序的介面Compareable
B:比較器排序
自定義:建立集合物件時是帶參構造,引數是new 自定義的類(),這個自定義的類要實現Comparator介面
在自定義儲存中無論是自然排序還是比較器排序重寫compareTo方法時,都是不緊要比較首要條件也要比較次要條件
自定義儲存中,自然排序是Compareable,比較器排序是compareTo,注意不一樣的哦
自然排序的程式碼:
封裝類person中
測試類:package day17.treeSet.zdy; /** * 如果一個類進行自然排序,那麼這個類就要實現自然排序的介面Compareable * @author Fanny * * * TreeSet自然排序是構造了一個二叉樹,如果大於就在右子數,小於就在左子樹,等於就不用管 * */ public class Person implements Comparable<Person>{ private String name; private int age; 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 Person(String name, int age) { super(); this.name = name; this.age = age; } public Person() { super(); } @Override public int compareTo(Person o) { //比較的首要條件就得有兩個變數,但是這隻有一個引數o,那麼那一個在哪呢? // 由於加入進去的就是this,因此那一個就用this. 進行呼叫 //根據要求先比較首要條件年齡 int num = this.age-o.age; //但是如果只考慮首要條件,就不準確,因為會有年齡相同而姓名不相同,不考慮次要條件,那麼這種情況就會被捨棄,顯然不合理。 //因此當年齡相同時(num==0)就比較姓名,根據姓名的比較差進行返回, // 不相同時,根據年齡差進行返回 int num2 = num == 0 ? this.name.compareTo(o.name) : num; return num2; } }
package day17.treeSet.zdy; /** * TreeSet採用自定義儲存,保證 唯一和排序 * 排序方式:採用自然排序,按照年齡進行排序 * 成員變數值都相同即相同 */ import java.util.TreeSet; public class TreeSetDemo { public static void main(String[] args) { TreeSet<Person> ts = new TreeSet<>(); Person p1 = new Person("abc",27); Person p2 = new Person("bcd",25); Person p3 = new Person("def",22); Person p4 = new Person("abc",27); Person p5 = new Person("npq",18); Person p6 = new Person("hhh",20); Person p7 = new Person("afg",27); Person p8 = new Person("add",22); ts.add(p1); ts.add(p2); ts.add(p3); ts.add(p4); ts.add(p5); ts.add(p6); ts.add(p7); ts.add(p8); for (Person person : ts) { System.out.println(person.getName()+"---"+person.getAge()); } } }
比較器排序:第一種可以自定義一個類實現comparetor介面,也可以使用匿名內部類
封裝類person:成員變數name,age以及帶參的構造方法,和setXxx(),getXxx()方法
自定義一個類實現comparetor介面
package day17.treeSet.zdy1;
import java.util.Comparator;
public class MyComparator implements Comparator<Person>{
@Override
public int compare(Person o1, Person o2) {
int num = o1.getName().length() - o2.getName().length();
int num2 = num == 0 ? o1.getName().compareTo(o2.getName()) : num;
int num3 = num2 == 0 ? o1.getAge() - o2.getAge() : num2;
return num3;
}
}
測試類:
package day17.treeSet.zdy1;
import java.util.Comparator;
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String[] args) {
//TreeSet<Person> ts = new TreeSet<>(new MyComparator());//自定義一個類MyComparator實現comparetor介面
TreeSet<Person> ts = new TreeSet<>(new Comparator<Person>() {//匿名內部類
@Override
public int compare(Person o1, Person o2) {
int num = o1.getName().length() - o2.getName().length();
int num2 = num == 0 ? o1.getName().compareTo(o2.getName()) : num;
int num3 = num2 == 0 ? o1.getAge() - o2.getAge() : num2;
return num3;
}
});
Person p1 = new Person("wanglihong",27);
Person p2 = new Person("linqingxia",30);
Person p3 = new Person("xiena",26);
Person p4 = new Person("wangzulan",28);
Person p5 = new Person("luhan",27);
Person p6 = new Person("hejiong",26);
Person p7 = new Person("wanglihong",27);
Person p8 = new Person("wanglihong",30);
ts.add(p1);
ts.add(p2);
ts.add(p3);
ts.add(p4);
ts.add(p5);
ts.add(p6);
ts.add(p7);
ts.add(p8);
for (Person p : ts) {
System.out.println(p.getName()+"---"+p.getAge());
}
}
}
相關推薦
集合TreeSet【java】
TreeSet:能夠對元素按照某種規則進行排序。 TreeSet排序方式:TreeSet是構造了一個二叉樹,如果大於就在右子數,小於就在左子樹,等於就不用管 排序有兩種方式A:自然排序B:比較器排序
【Java】提取JSON數值時遇到數組集合時使用的K-V方式轉換
方法 eee 數組 comm subst arr port jsonarray mob 1.實體類轉換方法 參照文章:http://www.cnblogs.com/dflmg/p/6933811.html 2.K-V方法(此方法比較笨,但是沒有辦法,我現在不知道有沒有相關的
【Java】Maven安裝、Eclipse配置以及相關錯誤解決集合
文件 格式 setting BYD cksum runt 文件編碼 原因 完成後 作者嘔血總結,下面寫的每一個錯誤我都遇過 · Maven安裝 · Eclipse配置 · Maven安裝 安裝前請確保已經裝有JDK。 一、 準備Maven程序包 到官網https
【java】【mybatis】在使用mybatis進行批量插入,批量更新等批量操作時,切割In集合List進行分批批量操作的java中的切割代碼
lse span ati 批量更新 次數 sublist 調用 size == 紅字部分代表mybatis的批量操作調用方法: int num = 0; int maxLength = 200; in
【Java】Java 集合學習總結 2018-10-5
Java 集合學習總結 1.Java集合框架是什麼?說出一些集合框架的優點? 每種程式語言中都有集合,最初的Java版本包含幾種集合類:Vector、Stack、HashTable和Array。 隨
【java】list集合之元素查重
list集合之元素查重 前言 在將excel表格中的資料插入到資料庫中之前,會先進行對資料庫的一個查重,也就是為了確定excel表格中的資料是否和資料庫中已有的資料是否重複,通過將e
【JAVA】基礎:集合、泛型、異常、反射
1.集合 集合就是高階陣列,可以存放任意型別的物件,同時可以自動擴容。 集合主要由兩個介面派生而出:Collection和Map Iterator 介面: 是Collection介面的父介面,主要是用於遍歷Collection中的元素。 語法: //構造 Li
【JAVA】java中實現map集合的資料存取詳解三種方法。Android程式設計師也是要會寫的
長期維護的Android專案,裡面包括常用功能實現,以及知識點詳解, 當然還有java中的知識點。具體請看github: https://github.com/QQ986945193/DavidAndroidProjectTools 好了,說正題
【Java】集合系列18(Arrays和Collections工具類)
1、Arrays類 Arrays類常用方法概述: 本類所有方法都是靜態的,本類方法是針對陣列的操作。 //部分Arrays的靜態方法(JDK1.8) static <T> List<T> asList(T... a)
【java】集合學習——Map 之 LinkedHashMap
前言 jdk 版本 jdk1.8.0_161 UML結構圖 LinkedHashMap:Map 介面的 雜湊表 和 連結列表的 實現。 相對於 HashMap 的特性是:有序性(插入元素的順序有序),因為內部使用了 雙向連結串列實現。 原始碼 建構函式 主要
【JAVA】Java集合類: Set、List、Map、Queue使用場景梳理
本文主要關注Java程式設計中涉及到的各種集合類,以及它們的使用場景 相關學習資料 目錄 Java集合類基本概念 Java集合類架構層次關係 Java集合類的應用場景程式碼 Java集合類基本概念 在程式設計中,常常需
JDK1.7和1.8中List集合中sort方法排序問題【JAVA】
上次做專案的過程中遇到一個對list集合排序的問題,一直困擾著我,後來一直到最後找了半天才發現問題所在。 因為我本機上JDK版本是1.8 ,而伺服器中JDK版本是1.7,因此線上下測試的過程中跑資料都好好地, 而到了線上卻總是出現問題,後來查詢很多文章才予以解決,現在特地記
【Java】 集合系列01(總體框架)
Java集合是Java提供的工具包,包含了常用的資料結構:集合、連結串列、佇列、棧、陣列、對映等。 Java集合工具包的位置是Java.util.*。 Java集合主要可以劃分為四個部分:List列表、Set集合、Map對映、工具類(Iterator迭代器、
【Java】Treeset實現自定義排序
兩個類,一個學生類,含姓名和出生日期兩個屬性;還有一個學生排序類,重寫compare函式,自定義排序規則是先比較出生日期,如果相同再比較姓名字母 package birthday; import java.util.Calendar; public class Stud
【Java】集合(List、Set、Map)遍歷、刪除、比較元素時的小陷阱
主要說明List,其餘兩個都一樣 一、漏網之魚-for迴圈遞增下標方式遍歷集合,並刪除元素 如果你用for迴圈遞增下標方式遍歷集合,在遍歷過程中刪除元素,你可能會遺漏了某些元素。說那麼說可能也說不清楚,看以下示例: import ja
【Java】遍歷List/Set/Map集合的一些常用方法
/* * 遍歷List/Set/Map集合的一些常用方法 */import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.List
【java】itoo項目實戰之hibernate 懶載入優化性能
bsp xtra extra pda 程序 前端框架 外連接 獲取 轉換成 在做itoo 3.0 的時候,考評系統想要上線,就開始導入數據了,僅僅導入學生2萬條數據,可是導入的速度特別的慢。這個慢的原因是由於導入的時候進行了過多的IO操作。可是導入成功之後,
【java】itoo項目實戰之hibernate 批量保存優化
新的 hibernate 缺點 try 實戰 lis 插入 entity man 在itoo中。基本上每一個系統都有一個導入功能,大量的數據填寫進入excel模板中。然後使用導入功能導入的數據庫中,這樣能夠大大的提高工作效率。那麽導入就涉及到了批量保存數據庫的
【Java】【滾動數組】【動態規劃】UVA - 11137 - Ingenuous Cubrency
得到 lose math scanner light clas details 狀態 ann 滾動數組優化自己畫一下就明白了。 http://blog.csdn.net/u014800748/article/details/45849217 解題思路:本題利用遞推關系解決。
【java】TCP和UDP傳輸協議
有序 equal sig [] link 客戶端 數據傳輸 端口 sock TCP協議和UDP協議的比較 TCP的全稱是Transmission Control Protocol (傳輸控制協議) 傳輸控制協議,是一種面向連接的協議,類似打電話 在通信的整個過程中