public class SetTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Set<String> set=new HashSet<String>();
set.add("");
set.add("3");
set.add("1");
set.add("2");
set.add("5");
set.add("4");
//遍历方式1
Iterator i = set.iterator();
while (i.hasNext()) {
String object = (String) i.next();
System.out.println(object);
}
//遍历方式2
for(String value : set){
System.out.print(value+" ");
}
//TreeSet 默认排序
Set<String> tset=new TreeSet<String>();
tset.add("3");
tset.add("1");
tset.add("2");
tset.add("5");
tset.add("4");
//遍历方式1
Iterator i1 = tset.iterator();
while (i1.hasNext()) {
String object = (String) i1.next();
System.out.println(object);
}
//TreeSet 自定义排序
Set<String> tset2=new TreeSet<String>(new Comparator<String>() {
//降序
@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
return o2.compareTo(o1);
}
});
tset2.add("3");
tset2.add("1");
tset2.add("2");
tset2.add("5");
tset2.add("4");
Iterator<String> i2 = tset2.iterator();
while (i2.hasNext()) {
String object = (String) i2.next();
System.out.print(object);
}
}
}
一、从HashSet开始
public class HashSet<E>extends AbstractSet<E>implements Set<E>, Cloneable, Serializable
HashSet ,实现了Set接口,内部封装了hashmap。HashSet 的绝大部分方法都是通过调用 HashMap 的方法来实现的,因此 HashSet 和 HashMap 两个集合在实现本质上是相同的。HashSet 底层采用 HashMap 来保存所有元素。
HashSet 中的集合元素实际上由 HashMap 的 key 来保存,value永远为PRESENT。
HashSet里的元素,和HashMap里key的性质是一样的,同样可允许唯一一个元素为空,且是无序的。
HashSet 是非线程安全。
二、另一个TreeSet
public class TreeSet<E>extends AbstractSet<E>implements NavigableSet<E>, Cloneable, SerializableTreeSet
TreeSet和TreeMap相似
TreeSet使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序。