为了与List接口的使用有所区分,在进行Set接口程序设计时要求其内部不允许保存重复元素。在Set接口中有两个常用的子类:HashSet(散列存放)、TreeSet(有序存放)。
HashSet子类
HashSet是Set接口较为常见的一个子类,该子类最大的特点是不允许保存重复元素,并且所有的内容都采用散列(无序)方式进行存储。
import java.util.HashSet;
import java.util.Set;
public class Hello {
public static void main(String[] args) {
Set<String> set = new HashSet<String>();
set.add("你好");
set.add("Hello");
set.add("你好啊");
set.add("Hello");
System.out.println(set);
}
}
//执行结果
[你好, Hello, 你好啊]
其中重复数据没有被保存,并且所有数据为散列存放。
TreeSet子类
TreeSet子类可以针对设置的数据进行排序保存。
import java.util.Set;
import java.util.TreeSet;
public class Hello {
public static void main(String[] args) {
Set<String> set = new TreeSet<String>();
set.add("abcd");
set.add("hello");
set.add("hah");
set.add("hello");
System.out.println(set);
}
}
//运行结果 从小到大排序
[abcd, hah, hello]
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
public class Hello {
public static void main(String[] args) {
//通过comparator比较器
Comparator<String> cmp = new Comparator<String>() {
public int compare(String a, String b) {
return b.compareTo(a);
}
};
Set<String> set = new TreeSet<String>(cmp);
set.add("abcd");
set.add("hello");
set.add("hah");
set.add("hello");
System.out.println(set);
}
}
//运行结果 从大到小排序
[hello, hah, abcd]