【Java基础】集合框架
【Java基础】Collection子接口:Set
【Java基础】Set接口的子类
Set接口
Set接口:一个不包含重复元素的 collection。
Set接口框架
|---Collection接口:单列集合,用来存储一个一个的对象;
|---Set:存储无序的、不可重复的数据; -->高中讲的“集合”
|---HashSet:底层数据结构是哈希表;
作为Set接口的主要实现类;
线程不安全;可以存储null值;
|---LinkedHashSet:底层数据结构是链表和哈希表;
作为HashSet的子类;
遍历其内部数据时,可以按照添加的顺序遍历;
|---TreeSet:底层数据结构是红黑树;
可以按照添加对象的指定属性,进行排序;
Set接口的案例
1、存储字符串并遍历
import java.util.HashSet;
import java.util.Set;
public class SetDemo1 {
public static void main(String[] args) {
//创建集合对象
Set<String> set = new HashSet<String>();
//把字符串添加到集合
set.add("hello");
set.add("world");
set.add("java");
set.add("world");
//遍历集合
for (String s : set) {
System.out.println(s);
}
}
}
2、存储自定义对象并遍历
//定义学生类Student-->省略
//测试类:
import java.util.HashSet;
import java.util.Set;
class SetDemo2 {
public static void main(String[] args) {
//创建集合对象
Set<Student> set = new HashSet<Student>();
//创建学生对象
Student s1 = new Student("张三", 18);
Student s2 = new Student("李四", 20);
Student s3 = new Student("王五", 22);
Student s4 = new Student("赵六", 24);
Student s5 = new Student("张三", 18);
Student s6 = new Student("李四", 22);
//把学生添加到集合
set.add(s1);
set.add(s2);
set.add(s3);
set.add(s4);
set.add(s5);
set.add(s6);
//遍历集合
for (Student s : hs) {
System.out.println(s.getName() + "," + s.getAge());
}
}
}
Set接口的子类
Set接口的子类的区别
- HashSet:
- 底层数据结构是哈希表
- 对集合的迭代顺序不作任何保证
- 元素唯一
- 依赖hashCode()和equals()方法
- LinkedHashSet:
- 底层数据结构是链表和哈希表
- 具有可预测的迭代次序
- 元素有序唯一
- 由链表保证元素有序
- 由哈希表保证元素唯一
- TreeSet:
- 底层数据结构是红黑树
- 能够对元素按照一定的规则进行排序
- 元素排序
- 自然排序
- 比较器排序
- 元素唯一
- 根据比较的返回值是否是0来决定
开发时如何选用List接口的子类?
- 具体看需求,不知道用哪个就选HashSet
- 要排序:TreeSet
- 不要排序:HashSet