HashSet:哈希表是通過使用稱為散列法的機制來存儲資訊的,元素并沒有以某種特定順序來存放;
LinkedHashSet:以元素插入的順序來維護集合的連結表,允許以插入的順序在集合中疊代;
TreeSet:提供一個使用樹結構存儲Set接口的實作,對象以升序順序存儲,通路和周遊的時間很快。
package com.test;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.TreeSet;
public class SetDemo {
public static void main(String[] args) {
HashSet<String> hs = new HashSet<String>();
hs.add("B");
hs.add("A");
hs.add("D");
hs.add("E");
hs.add("C");
hs.add("F");
System.out.println("HashSet 順序:\n"+hs);
LinkedHashSet<String> lhs = new LinkedHashSet<String>();
lhs.add("B");
lhs.add("A");
lhs.add("D");
lhs.add("E");
lhs.add("C");
lhs.add("F");
System.out.println("LinkedHashSet 順序:\n"+lhs);
TreeSet<String> ts = new TreeSet<String>();
ts.add("B");
ts.add("A");
ts.add("D");
ts.add("E");
ts.add("C");
ts.add("F");
System.out.println("TreeSet 順序:\n"+ts);
}
}
輸出結果:
HashSet 順序:
[D, E, F, A, B, C]
LinkedHashSet 順序:
[B, A, D, E, C, F]
TreeSet 順序:
[A, B, C, D, E, F]
另外,重點差別HashSet、TreeSet:
1. HashSet是通過HashMap實作的,TreeSet是通過TreeMap實作的,隻不過Set用的隻是Map的key
2. Map的key和Set都有一個共同的特性就是集合的唯一性.TreeMap更是多了一個排序的功能.
3. hashCode和equal()是HashMap用的, 因為無需排序是以隻需要關注定位和唯一性即可.
a. hashCode是用來計算hash值的,hash值是用來确定hash表索引的.
b. hash表中的一個索引處存放的是一張連結清單, 是以還要通過equal方法循環比較鍊上的每一個對象 才可以真正定位到鍵值對應的Entry.
c. put時,如果hash表中沒定位到,就在連結清單前加一個Entry,如果定位到了,則更換Entry中的value,并傳回舊value
4. 由于TreeMap需要排序,是以需要一個Comparator為鍵值進行大小比較.當然也是用Comparator定位的.
a. Comparator可以在建立TreeMap時指定
b. 如果建立時沒有确定,那麼就會使用key.com
http://www.cnblogs.com/ibook360/archive/2011/11/28/2266062.html
http://blog.csdn.net/foart/article/details/4263456