比較HashSet和TreeSet

   代碼先奉上

  

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就夠了


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章