欢迎来到全网最完整的java进阶知识系列教程!!!每天定时更新!!!
本期是Java进阶知识系列的第五讲,继上一讲List类的内容之后,今天的主题是另一个集合类——Set。
如果你正在学习Java,不妨收藏这篇文章,或者关注我,定期收获与Java有关的知识和项目信息!
之前四课的内容,可点击下方获取:
接下来就让我们正式开始分享课程内容吧。
一、HashSetSet类是无序、不可重复的数据集合,HashSet是Set类的实现接口。
示例代码:
import java.util.HashSet;
import java.util.Set;
public class SetDemo {
public static void main(String[] args) {
// 初始化集合Set
Set<String> langset = new HashSet<String>();
// 向集合里添加数据
langset.add("java");
langset.add("python");
langset.add("go");
System.out.println("集合为:" langset);
// 获取集合数据量
System.out.println("集合的数据量为:" langset.size());
// 查看数据是否已存在
System.out.println("go记录是否已存在:" langset.contains("go"));
}
}
运行结果:
集合为:[python, java, go]
集合的数据量为:3
go记录是否已存在:false
说明:
- 从上例可以看出,HashSet的顺序与添加的顺序无关,是无序排列的,体现了Set类的无序性特点。
二、LinkedHashSet
LinkedHashSet最大的特点是:虽然存储是无序的,但通过链表结构,LinkedHashSet在调取和打印的时候,可以实现依添加顺序输出。
示例代码:
import java.util.LinkedHashSet;
import java.util.Set;
public class SetDemo {
public static void main(String[] args) {
// 初始化集合Set
Set<String> langset = new LinkedHashSet<String>();
// 向集合里添加数据
langset.add("java");
langset.add("python");
langset.add("go");
System.out.println("集合为:" langset);
}
}
运行结果:
集合为:[java, python, go]
说明:
- 可以看到,在打印LinkedHashSet的时候,顺序是和添加顺序一致,这是LinkedHashSet的特性。
三、TreeSet
TreeSet的特性是,它的数据存储虽然是无序的,但输出顺序是根据内建的比较器来决定的。
示例代码:
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
public class SetDemo {
public static void main(String[] args) {
// 初始化集合Set
Set<Integer> numset = new TreeSet<Integer>(new Comparator1());
// 向集合里添加数据
numset.add(10);
numset.add(90);
numset.add(30);
System.out.println("集合为:" numset);
}
// 比较器
static class Comparator1 implements Comparator<Integer> {
@Override
public int compare(Integer o1, Integer o2) {
// 降序排列的设定
return o2-o1;
}
}
}
运行结果:
集合为:[90, 30, 10]
说明:
- 从上例可以看到,输出的顺序并不是根据添加数据的顺序来的,这是因为TreeSet的特性是根据比较器结果得到的顺序输出;
- 这里的Comparator1内部类通过实现Comparator接口的方式,完成比较器的设置,并赋给numset;
- Comparator1中的成员方法compare就是比较器的逻辑,o2-o1表示降序,反之,o1-o2表示升序
- Comparator一般不需要是静态类,之所以这里定义static class Comparator1 implements Comparator<Integer>,是因为主方法main是静态方法。
以上就是Java进阶知识系列第五讲的全部内容。
跟着老K一起每天积累一点点,学习Java就不会有负担。
正在学习的小伙伴记得给老K一个赞哦,你的支持是我持续输出课程内容最大的动力!
想了解Java基础部分的课程内容,可以查看以下链接:
结束语我是专注于开发领域的 ,会持续生产关于如何学习编程语言的优质内容。
如果你想学习Java编程,或者想精进你的Java编程能力,可以关注我。
如果你对开发、编程有任何疑问或者有想了解的内容,而我暂时没有写到的,也欢迎随时来找我聊聊。