package listSetMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.TreeSet;
/**
* HashSet、TreeSet和LinkedHashSet的区别
* TreeSet 依靠的是Comparable 来区分重复数据;
HashSet 依靠的是hashCode()、equals()来区分重复数据
Set 里面不允许保存重复数据。
* @author Administrator
*
*/
public class hashTreeSet {
/**
* 1、 Set接口
Set接口继承了Collection接口。Set集合中不能包含重复的元素,每个元素必须是唯一的。
你只需将元素加入set中,重复的元素会自动移除。
2、 HashSet vs. TreeSet vs. LinkedHashSet
HashSet是采用hash表来实现的。其中的元素没有按顺序排列,
add()、remove()以及contains()等方法都是复杂度为O(1)的方法。
TreeSet是采用树结构实现(红黑树算法)。元素是按顺序进行排列,
但是add()、remove()以及contains()等方法都是复杂度为O(log (n))的方法。
它还提供了一些方法来处理排序的set,如first(), last(), headSet(), tailSet()等等。
LinkedHashSet介于HashSet和TreeSet之间。它也是一个hash表,但是同时维护了一个双链表来记录插入的顺序。
基本方法的复杂度为O(1)。
*/
public static void main(String[] args) {
//testTreeSet();
//testHashSet();
testLinkedHashSet();
}
public static void testTreeSet(){
TreeSet< Integer> set = new TreeSet<Integer>();
set.add(32);
set.add(678);
set.add(3);
set.add(89);
set.add(23);
set.add(67);
/****
* ceiling(E e)
返回此 set 中大于等于给定元素的最小元素;如果不存在这样的元素,则返回 null
floor(E e)
返回此 set 中小于等于给定元素的最大元素;如果不存在这样的元素,则返回 null。
pollFirst()
获取并移除第一个(最低)元素;如果此 set 为空,则返回 null。
pollLast()
获取并移除最后一个(最高)元素;如果此 set 为空,则返回 null。
*/
System.out.println(set.ceiling(5));
System.out.println(set.first());
System.out.println(set.floor(3));
System.out.println(set.headSet(6));
/*******只能通过迭代器遍历*********/
System.out.println("********");
Iterator iterator = set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
for (Integer integer : set) {
System.out.println(integer);
}
}
public static void testHashSet(){
HashSet< Integer> set = new HashSet<Integer>();
set.add(32);
set.add(78);
set.add(89);
set.add(8);
set.add(872);
set.add(32);
set.add(678);
for (Integer integer : set) {
System.out.println(integer);
}
Iterator< Integer> iterator = set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
public static void testLinkedHashSet(){
LinkedHashSet<Integer> set = new LinkedHashSet<Integer>();
set.add(3);
set.add(627);
set.add(34);
set.add(67);
set.add(798);
set.add(32);
set.add(68);
Iterator<Integer> iterator = set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}