代碼先奉上
package com.jay.knowledge.set_study;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;
public class Set002 {
public static void main(String[] args) {
//循環次數
int M=666666;
Set<Double> treeset = new TreeSet<Double>();
Set<Double> hashset = new HashSet<Double>();
Long startTime, endTime;
//添加時間比較
startTime = System.nanoTime();
for(int i=0; i<M; i++) {
treeset.add(Math.random());
}
endTime = System.nanoTime();
System.out.println("TreeSet添加花費的時間: " + (endTime - startTime));
startTime = System.nanoTime();
for(int i=0; i<M; i++) {
hashset.add(Math.random());
}
endTime = System.nanoTime();
System.out.println("HashSet添加花費的時間: " + (endTime - startTime));
//查詢時間比較
startTime = System.nanoTime();
for(int i=0; i<M; i++) {
treeset.contains(Math.random());
}
endTime = System.nanoTime();
System.out.println("TreeSet查詢花費的時間: " + (endTime - startTime));
startTime = System.nanoTime();
for(int i=0; i<M; i++) {
hashset.contains(Math.random());
}
endTime = System.nanoTime();
System.out.println("HashSet查詢花費的時間: " + (endTime - startTime));
}
}
再來點文字介紹(轉)
【設值比較】
①話基本時間保持一致,但是TreeSet是相對比較長,主要是因爲TreeSet有個有個樹比較排序的問題,所以耗時比較長。
②hash的碰撞率是比較低,並且沒有排序,所以相對快一點。
【取值比較】
由於hash原理,碰撞率比較低說獲取的值比較次數比較少,而TreeSet採用樹結構,必須一次次比較下去,所耗時多一點不過看結果基本也瞭解,百萬級別的treeset的比較差不多是hash的四倍
【個人觀點】
1.在超大數據面前,若不需要考慮順序問題,首選HashSet;若要考慮順序問題,沒有辦法,TreeSet理當被選;2.在一般的小數據操作面前HashSet就夠了