JAVA中TreeSet集合儲存類,類必須實現Compareble介面
TreeSet是有序不可重複集,具有以下特點:
1、資料會按自然排序(可以理解為從小到大排序)
2、不可儲存null
3、資料不可重複
4、非執行緒安全
數字會從小到大進行排序—–例子:
package com.ckinghan.collectionDemo;
import java.util.Date;
import java.util.Set;
import java.util.TreeSet;
public class TreeSetDemo {
/**
*
* @描述:TreeSet集合的特點:
* 1、資料會按自然排序(可以理解為從小到大排序)
* 2、不可儲存null
* 3、資料不可重複
* 4、非執行緒安全
*
* @時間:2017年5月9日22:41:41
* @注意:
* @作者:Ckinghan
* @param args
*/
public static void main(String[] args) {
/**
* 建立一個數字型別的treeSet有序不重複集並賦Integer型別的值
* 檢視集合的結果,會按從小到大的順序的排序
*/
Set<Integer> set = new TreeSet<>();
set.add(1);
set.add(9);
set.add(4);
set.add(2);
set.add(5 );
set.add(8);
set.add(3);
set.add(1);
System.out.println(set);
}
}
執行結果:
[1, 2, 3, 4, 5, 8, 9]
從結果上可以發現,數值“1”分明儲存了兩次,卻只能留存一個,這說明TreeSet不能儲存重複的值,並且結果是從小到大排序的
字串會將每個字元的ACIIS拿出來進行對比並排序—–例子:
package com.ckinghan.collectionDemo;
import java.util.Date;
import java.util.Set;
import java.util.TreeSet;
public class TreeSetDemo {
/**
*
* @描述:TreeSet集合的特點:
* 1、資料會按自然排序(可以理解為從小到大排序)
* 2、不可儲存null
* 3、資料不可重複
* 4、非執行緒安全
*
* @時間:2017年5月9日22:41:41
* @注意:
* @作者:Ckinghan
* @param args
*/
public static void main(String[] args) {
/**
* 建立一個String型別的TreeSet集合
* 因為String實現了Comparable介面,所以可以在TreeSet集合儲存並排序
*/
Set<String> set2 = new TreeSet<String>();
set2.add("wod");
set2.add("abe");
set2.add("abc");
System.out.println(set2);
}
}
執行結果:
[abc, abe, wod]
可以看出,字串是按字母從小到大排序的。
對於程式設計師所寫的類,如果沒有實現Comparable介面,是無法放到treeSet集合中的,示例程式碼如下:
package com.ckinghan.collectionDemo;
import java.util.Date;
/**
* @author:Ckinghan
* @date:2017年5月9日22:36:28
* @描述:測試實體類,用以實現Comparable介面,在treeSet集合中進行排序,本次程式碼沒有實現Comparable介面
*/
public class Enity {
public Integer id;
public String tableName;
public Date createTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Enity() {
super();
}
public Enity(Integer id, String tableName, Date createTime) {
super();
this.id = id;
this.tableName = tableName;
this.createTime = createTime;
}
}
測試程式碼如下:
package com.ckinghan.collectionDemo;
import java.util.Date;
import java.util.Set;
import java.util.TreeSet;
public class TreeSetDemo {
/**
*
* @描述:TreeSet集合的特點:
* 1、資料會按自然排序(可以理解為從小到大排序)
* 2、不可儲存null
* 3、資料不可重複
* 4、非執行緒安全
*
* @時間:2017年5月9日22:41:41
* @注意:
* @作者:Ckinghan
* @param args
*/
public static void main(String[] args) {
/**
* 如果類沒有實現Comparable介面,是無法儲存在treeSet集合中的
*/
Set<Enity> set3 = new TreeSet<>();
set3.add(new Enity(1, "employeeInfo", new Date()));
set3.add(new Enity(2, "employeeInfo", new Date()));
set3.add(new Enity(3, "employeeInfo", new Date()));
set3.add(new Enity(4, "employeeInfo", new Date()));
set3.add(new Enity(1, "employeeInfo", new Date()));
System.out.println(set3);
}
}
執行結果如下 :
Exception in thread "main" java.lang.ClassCastException: com.ckinghan.collectionDemo.Enity cannot be cast to java.lang.Comparable
at java.util.TreeMap.compare(TreeMap.java:1294)
at java.util.TreeMap.put(TreeMap.java:538)
at java.util.TreeSet.add(TreeSet.java:255)
at com.ckinghan.collectionDemo.TreeSetDemo.main(TreeSetDemo.java:55)
程式設計師自己定義 的類,要實現了Comparable介面後方可儲存到treeSet集合中,示例程式碼如下 :
package com.ckinghan.collectionDemo;
import java.util.Date;
/**
* @author:Ckinghan
* @date:2017年5月9日22:36:28
* @描述:測試實體類,用以實現compareTo介面,在treeSet集合中進行排序
*/
public class Enity implements Comparable<Enity>{
public Integer id;
@Override
public String toString() {
return "Enity [id=" + id + ", tableName=" + tableName + ", createTime=" + createTime + "]";
}
public String tableName;
public Date createTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Enity() {
super();
}
public Enity(Integer id, String tableName, Date createTime) {
super();
this.id = id;
this.tableName = tableName;
this.createTime = createTime;
}
/**
* 重寫compareTo方法,否則無法儲存到treeSet集合中
*/
@Override
public int compareTo(Enity o) {
//對比是否this大於o
int val = this.id - o.id;
//如果兩者相同
if(val == 0){
//判斷tableName是否為空,如果不為空,則判斷兩者的tableName是否相等
if(this.tableName != null ){
//獲取對比的值
val = this.tableName.compareTo(o.tableName);
//如果兩都的tableName相等,則判斷兩都的createTime是否相等
if(val == 0){
//注意:這裡不建議使用getTime()再相減,因為如果時間相差過大,可能超過int的最大值,即使不大於int的最大值,最後還是要再強轉為int
val = this.createTime.compareTo(o.createTime);
}
}
}
return val;
}
}
測試類程式碼:
package com.ckinghan.collectionDemo;
import java.util.Date;
import java.util.Set;
import java.util.TreeSet;
public class TreeSetDemo {
/**
*
* @描述:TreeSet集合的特點:
* 1、資料會按自然排序(可以理解為從小到大排序)
* 2、不可儲存null
* 3、資料不可重複
* 4、非執行緒安全
*
* @時間:2017年5月9日22:41:41
* @注意:
* @作者:Ckinghan
* @param args
*/
public static void main(String[] args) {
/**
* 如果類沒有實現compareTo介面,是無法儲存在treeSet集合中的
*/
Set<Enity> set3 = new TreeSet<>();
set3.add(new Enity(1, "employeeInfo", new Date()));
set3.add(new Enity(2, "employeeInfo", new Date()));
set3.add(new Enity(3, "employeeInfo", new Date()));
set3.add(new Enity(4, "employeeInfo", new Date()));
set3.add(new Enity(1, "employeeInfo", new Date()));
/**
* 迴圈列印set3集合中的內容
*/
for(Enity enity : set3){
System.out.println(enity);
}
}
}
執行結果:
Enity [id=1, tableName=employeeInfo, createTime=Tue May 09 23:16:06 CST 2017]
Enity [id=2, tableName=employeeInfo, createTime=Tue May 09 23:16:06 CST 2017]
Enity [id=3, tableName=employeeInfo, createTime=Tue May 09 23:16:06 CST 2017]
Enity [id=4, tableName=employeeInfo, createTime=Tue May 09 23:16:06 CST 2017]
注意:我添加了兩個ID為1的資料,結果卻出現了一個,應該是最終的返回值 為0影響的,但我也不敢肯定,因為在新增第一條資料時,返回的也是0。還需要再查詢資料才能確定。
找到了一篇文章 ,它說返加0時確實會做為是否重複的參考標準之一,但為什麼第一個新增的值返回的也是0,去可以新增呢?還要找相關的資料才行
相關推薦
JAVA中TreeSet集合儲存類,類必須實現Compareble介面
TreeSet是有序不可重複集,具有以下特點: 1、資料會按自然排序(可以理解為從小到大排序) 2、不可儲存null 3、資料不可重複 4、非執行緒安全 數字會從小到大進行排序—–例子: package com.ckinghan.collecti
Java中的集合詳解,結合 ArrayList、HashSet 的區別以及HashCode的作用。
Java中的集合: (1)Collection List(有序,可重複) ArrayList
Java中的集合之ArrayList,Vector和Stack
這三個集合型別,其底層都是陣列實現的。討論集合關注的問題: 底層資料結構 增刪改查方式 初始容量,擴容方式,擴容時機 執行緒安全與否 是否允許空,是否允許重複,是否有序 ArrayList ArrayList是
java中的集合儲存結構
Collection是最基本的集合介面,一個Collection代表一組Object的集合,這些Object被稱作Collection的元素。 所有實現Collection介面的類都必須提供兩個標準的建構函式:無引數的建構函式用於建立一個空的Collection,有一個Collectio
java中三大集合類Map,Set,List的詳細介紹
在講Map,Set,List三大介面之前,我們先來了解下Set和List的父類介面Collection介面 一:Collection介面:是java.util包下的一個介面: 其中有一些主要的方法: size(); isEmpty(); clear(); c
Java 往TreeSet集合中儲存自定義物件學生,按照學生的年齡進行排序。
Set:無序,不可以重複元素。|--HashSet:資料結構是雜湊表。執行緒是非同步的。保證元素唯一性的原理:判斷元素的hashCode值是否相同。如果相同,還會繼續判斷元素的equals方法,是否為true。|--TreeSet:可以對Set集合中的元素進行排序。底層資料
java中的幾種泛型類——HashSet、HashMap、TreeSet、TreeMap,遍歷map,排序,HashTable比較
package test; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.TreeMap; public c
java中使用sax解析xml,以實體類集合的方式接受xml解析的值
1.先編寫要解析的xml檔案: <?xml version="1.0" encoding="utf-8"?> <class> <stu id="001"> <name>Allen</name> <sex&g
java 中關於集合類的整理02
cto 對象 arr 數組 bsp 有一個 只有一個 集合 java 四. 具體的集合 2. ArrayList 數組列表 註: ArrayList類 與 Vector類 有什麽區別呢? 答:Vector類的所有方法都是同步的,所以說Vector類是線程安全的,所以兩個線程
獲取java中當前運行代碼類名,行號,方法名
我們 class new t static get new rac 加密 web 最近項目在線上出現一個報加密控件輸入為空的bug,由於IOS,Android,web端都報,但是沒找到原因,因為是偶現,所以為了捕捉這個問題,做出要我們把報錯信息傳給後臺,所以就寫一下獲取的方
Java開發知識之Java中的集合上List接口以及子類講解.
必須 元素 範圍 指向 指定 pub next 自己 什麽 Java開發知識之Java中的集合類 一丶什麽是集合類 如果你學習說數據結構,那麽學習集合就很簡單. 因為集合就是存儲數據的結構. 例如 有鏈表結構 (list ) 還有 map結構.等
Java開發知識之Java中的集合上List介面以及子類講解.
Java開發知識之Java中的集合類 一丶什麼是集合類 如果你學習說資料結構,那麼學習集合就很簡單. 因為集合就是儲存資料的結構. 例如 有連結串列結構 (list ) 還有 map結構.等等. 集合類就是儲存資料的集合. 我們可以看一下繼承圖: Co
java中無法找到主方法,無法找到類,web應用第一次報500,第二次報404
在重灌機器後,原來的許多java工程在重新被新安裝的Eclipse讀取過程中出現了java.lang.NoNoClassDefFoundError的問題,檢視工程目錄中bin路徑下沒有生成對應的.class文件網上查閱了很多資料,大部分都指示classpath設定不對。但是Eclipse本身並不需要配置cla
Java中基本資料型別與包裝類,字串轉換
儲存範圍大小: byte-short-char-int-long-float-double 低階到高階自動型別轉換: int i = 5; float f = i; double d = i; 高階到低階強制型別轉換: int a = 20; byte b = (byte) a;
Java(1) Java中如何使封裝自己的類,建立並使用自己的類庫?
Java中如何使封裝自己的類,建立並使用自己的類庫? ——感謝您的閱讀,本篇文章轉載自以下連結,支援原創,人人有責。 http://blog.csdn.net/luoweifu/ar
Java中Map集合及其子類
Collection集合的特點是每次進行單個物件的儲存,如果現在要進行一對物件的儲存,就只能用Map集合來完成,即Map集合中會一次性儲存兩個物件,且這兩個物件的關係:key = value結構。這種結構的最大特點是可以通過key找到對應的value內容。1.Map介面Map
集合類 Java中的集合類解析和一些有深入的面試題
第一題: 現有的程式程式碼模擬產生了16個日誌物件,並且需要執行16秒才能列印完這些日誌,請在程式中增加4個執行緒去呼叫parseLog()方法來分頭列印 這16個日誌物件,程式只需要執行4秒即可列印完這些日誌物件。 原始程式碼: pub
Java中如何使封裝自己的類,建立並使用自己的類庫?
Java中如何使封裝自己的類,建立並使用自己的類庫? 該文轉載SmilingSunrise的文章:http://blog.csdn.net/luoweifu/article/details/7281494 一、先來明白一下關於classpath和path的概念 p
java中常見集合類的遍歷
一、前言 我們經常在工作當中使用到集合,java當中的集合類較多,且自帶有豐富方法可對集合中的元素進行靈活操作,我們在使用時不必考慮資料結構和演算法實現細節,只需建立集合物件直接使用即可,這給我們帶來了極大的便利。本文對日常工作中常用的集合遍歷問題進行簡單
java中TreeSet類add時去重問題(與自己定義的Comparator有直接關係)
這個是我在百度問答裡面問的一個問題(直接copy過來的) 向TreeSet新增p1到p5後,輸出發現p5沒有加進去... 按我的理解來說,p5與p2雖然score屬性值一樣,但是它們是不同的物件,應該可以新增到TreeSet中啊 ------Person沒有重寫equa