import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
public class TestSet {
public static void main(String[] args){
String[] str1 = {"ccc","bad","abd","bbb","bac","abc","bac","ddd"};
List<String> list = new ArrayList<String>();
Set hashSet = new HashSet(); //没有固定顺序,速度快(相比线性列表)
Set treeSet = new TreeSet(); //按升序有序存储
Set linkedHashSet = new LinkedHashSet(); //升序,效率高
Set set = new LinkedHashSet(); //升序,效率高
System.out.print("原始数据 :");
//添加单个元素
for(int i = 0;i<str1.length;i++){
hashSet.add(str1[i]);
treeSet.add(str1[i]);
linkedHashSet.add(str1[i]);
list.add(str1[i]);
System.out.print(str1[i]+" ");
}
//添加整个集合
set.addAll(list);
System.out.println("\nhashSet :"+hashSet+" 无序");
System.out.println("treeSet :"+treeSet+" 升序");
System.out.println("linkedHashSet:"+linkedHashSet+" 升序");
System.out.print("set :");
Iterator it = set.iterator();
while(it.hasNext()){
System.out.print(it.next()+" ");
}
}
}
结果:
原始数据 :ccc bad abd bbb bac abc bac ddd
hashSet :[abc, abd, ddd, bac, ccc, bad, bbb] 无序
treeSet :[abc, abd, bac, bad, bbb, ccc, ddd] 升序
linkedHashSet:[ccc, bad, abd, bbb, bac, abc, ddd] 升序
set :ccc bad abd bbb bac abc ddd
由此可见Set的子类都可以剔除重复的单词,其中HashSet是无序存储,优点是存取速度快,TreeSet按照升序有序存储,但存取速度慢,LinkedHashSet集成二者的优点,升序存储且存取速度快。