Set集合是Collection的子接口
该集合中的元素的唯一的! 无序的
HashSet
不能保证元素的迭代顺序恒久不变,底层哈希表(HashMap实例)
无序性:(存储和取出不一致!)
哈希表能够保证元素唯一:
-
依赖于 public int hashCode() public boolean equals(Object e)) ;
HashSet的add方法依赖于HashMap的put方法
依赖于: HashCode() / equals(Object e)
import java.util.HashSet;
public class HashSetDemo {
public static void main(String[] args) {
HashSet<String> hs = new HashSet<String>();
hs.add("hello");
hs.add("every");
hs.add("day");
hs.add("hello");
for (String s : hs) {
System.out.println(s);
}
}
}
LinkedHashSet
继承自HashSet
-
哈希表/ 链接列表 1)元素唯一性(哈希表保证) 2)有序性(存储和取出一致),链表保证
import java.util.LinkedHashSet;
public class LinkedHashSetDemo {
public static void main(String[] args) {
LinkedHashSet<String> lhs = new LinkedHashSet<String>() ;
lhs.add("hello") ;
lhs.add("hello") ;
lhs.add("world") ;
lhs.add("world") ;
for(String s:lhs) {
System.out.println(s);
}
}
}
TreeSet
TreeSet集合基于TreeMap的一个红黑树结构(Red-Black-Tree)
其实就是一种二叉树结构
-
根据其构造方法: 1)自然顺序排序:public TreeSet() 2)选择器排序
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String[] args) {
TreeSet<Integer> ts = new TreeSet<Integer>();
ts.add(12);
ts.add(43);
ts.add(56);
ts.add(63);
ts.add(96);
ts.add(13);
ts.add(18);
for (Integer i: ts) {
System.out.println(i);
}
}
}