1、HashSet类(散列存放)
Java.util.HashSet类实现了Java.util.Set接口。
l 它不允许出现重复元素;
l 不保证和政集合中元素的顺序
l 允许包含值为null的元素,但最多只能有一个null元素。
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
public class TestHashSet
{
public static void main(String [] args)
{
HashSet h=new HashSet();
h.add("1st");
h.add("2nd");
h.add(new Integer(3));
h.add(new Double(4.0));
h.add("2nd"); //重复元素,未被添加
h.add(new Integer(3)); //重复元素,未被添加
h.add(new Date());
System.out.println("开始:size="+h.size());
Iterator it=h.iterator();
while(it.hasNext())
{
Object o=it.next();
System.out.println(o);
}
h.remove("2nd");
System.out.println("移除元素后:size="+h.size());
System.out.println(h);
}
}
HashSet的实现: 对于HashSet而言,它是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet 的实现比较简单,相关HashSet的操作,基本上都是直接调用底层HashMap的相关方法来完成。HashMap原理介绍可参考https://zhangshixi.iteye.com/blog/672697
2、TreeSet(有序存放)
TreeSet描述的是Set的一种变体——可以实现排序等功能的集合,它在讲对象元素添加到集合中时会自动按照某种比较规则将其插入到有序的对象序列中,并保证该集合元素组成的读uixiangxulie时刻按照“升序”排列。TreeSet是采用树结构实现(称为红黑树算法),元素是按顺序进行排列,主要有add()、remove()以及contains()等方法,它们都是复杂度为O(log (n))的方法;它还提供了一些处理排序的set方法,如first(), last(), headSet(), tailSet()等
import java.util.TreeSet;
import java.util.Iterator;
public class TestTreeSet
{
public static void main(String [] args)
{
TreeSet ts=new TreeSet();
ts.add("orange");
ts.add("apple");
ts.add("banana");
ts.add("grape");
Iterator it=ts.iterator();
while(it.hasNext())
{
String fruit=(String)it.next();
System.out.println(fruit);
}
}
}
3、LinkedHashSet类:LinkedHashSet正好介于HashSet和TreeSet之间,它也是一个hash表,但它同时维护了一个双链表来记录插入的顺序,基本方法的复杂度为O(1)。代码例子如下:
LinkedHashSet dset = new LinkedHashSet();
dset.add(new Apple(7));
dset.add(new Apple(6));
dset.add(new Apple(8));
dset.add(new Apple(10));
dset.add(new Apple(9));
Iterator iterator = dset.iterator();
while (iterator.hasNext()) {
System.out.print(iterator.next() + " ");
}