一、Set
Set用来存放对象的,不能存在重复的对象。
public interface Set < E >
< E > 表示的泛型 -----容器中存放的元素的类型 —指代的是引用数据类型,基本数据类型不能当作泛型来使用,而是要使用基本数据类型的封装类
二、HashSet
特点:
- 不能存在重复元素
- 底层结构是哈希表(HashTable)
- 无序—无索引
- 可以存放null元素
- 牺牲空间换时间—运行速度较快
- 扩容和加载因子 需要根据HashMap的原理来决定
简单示例
public class TestSet {
public static void main(String[] args) {
Set<String> s = new HashSet<String>();
//添加元素
s.add(null);
s.add("123");
s.add("456");
s.add("789");
s.add("111");
s.add("abc");
System.out.println(s);
//使用迭代器查看值
Iterator<String> tar=s.iterator();
while(tar.hasNext()) {
String s1 = tar.next();
System.out.println(s1);
}
}
}
运行结果
三、TreeSet
特点:
- 底层结构是二叉树结构
- 二叉树认为能够存放的树形结构中的元素都是有序元素
- 不许存放重复元素
- 不允许存放null元素
简单示例
public class Treeset {
public static void main(String[] args) {
Set<Integer> set = new TreeSet<Integer>();
//添加元素
set.add(7);
set.add(2);
set.add(3);
set.add(6);
set.add(5);
set.add(0);
set.add(0);
System.out.println(set);
//使用迭代器查看值
Iterator<Integer> tar=set.iterator();
while(tar.hasNext()) {
Integer s1 = tar.next();
System.out.println(s1);
}
}
}
运行结果
四、适用场景
- HashSet是基于Hash算法实现的,其性能通常都优于TreeSet。为快速查找而设计的Set,我们通常都应该使用HashSet,在我们需要排序的功能时,我们才使用TreeSet。