Java集合框架 Set接口实现类--TreeSet概述及使用
Posted Z && Y
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java集合框架 Set接口实现类--TreeSet概述及使用相关的知识,希望对你有一定的参考价值。
Collection体系集合
Ser子接口
1. TreeSet概述
2. TreeSet的使用
2.1 示例代码01 保存String类型(String类默认实现了Comparable接口
package set;
import java.util.Iterator;
import java.util.TreeSet;
/**
* 使用TreeSet保存数据
* 存储结构:红黑树
* 要求:元素类必须实现Comparable接口,compareTo方法返回0,认为是重复元素
*/
public class TreeSetDemo01 {
public static void main(String[] args) {
TreeSet<String> strs = new TreeSet<String>();
/*
添加元素
*/
strs.add("edqwddwad");
strs.add("ddqeeqwf");
strs.add("cfqewfqw");
strs.add("bfweqfqw");
strs.add("aqwfqfeqw");
strs.add("aqwfqfeqw");// 不可以添加重复的数据
System.out.println("String类型默认按照第一个字符的ASCII码大小正序排序: \\n" + strs.toString() + "\\n");
/*
删除元素
*/
strs.remove("ddqeeqwf");
strs.remove("cfqewfqw");
System.out.println("删除了ddqeeqwfcfqewfqw和: \\n" + strs.toString() + "\\n");
/*
遍历集合
*/
System.out.println("--------------使用增强for遍历--------------");
for (String str : strs) {
System.out.print(str + "\\t");
}
System.out.println();
System.out.println("--------------使用迭代器遍历--------------");
Iterator<String> iterator = strs.iterator();
while (iterator.hasNext()) {
System.out.print(iterator.next() + "\\t");
}
System.out.println("\\n");
/*
判断
*/
System.out.println("集合中是否包含edqwddwad: " + strs.contains("edqwddwad"));
System.out.println("集合中是否为空: " + strs.isEmpty());
}
}
运行结果:
2.2 示例代码02 保存自定义类型
package set;
import java.util.TreeSet;
public class TreeSetDemo02 {
public static void main(String[] args) {
TreeSet<Student> treeSet = new TreeSet<>();
Student s1 = new Student("小明", 22);
Student s2 = new Student("小明", 21);
Student s3 = new Student("小明", 19);
Student s4 = new Student("小明", 23);
Student s5 = new Student("小明", 20);
treeSet.add(s1);
treeSet.add(s2);
treeSet.add(s3);
treeSet.add(s4);
treeSet.add(s5);
System.out.println(treeSet.toString());
}
}
/*
自定义学生类
*/
class Student {
private final String name;
private final int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\\'' +
", age=" + age +
'}';
}
}
运行结果:
原因: 学生类没有实现Comparable接口
改进后:
package set;
import java.util.TreeSet;
public class TreeSetDemo02 {
public static void main(String[] args) {
TreeSet<Student> treeSet = new TreeSet<>();
Student s1 = new Student("小明", 22);
Student s2 = new Student("小立", 21);
Student s3 = new Student("小周", 19);
Student s4 = new Student("小王", 23);
Student s5 = new Student("小邓", 20);
treeSet.add(s1);
treeSet.add(s2);
treeSet.add(s3);
treeSet.add(s4);
treeSet.add(s5);
System.out.println(treeSet.toString());
}
}
/*
自定义学生类
*/
class Student implements Comparable<Student> {
private final String name;
private final int age;
public String getName() {
return name;
}
public int getAge() {
return age;
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\\'' +
", age=" + age +
'}';
}
/**
* MethodName: compareTo
* Description: 如果年龄不同,就按照年龄的正序排序
* 如果年龄相同, 就按照字符串自带的compareTo方法排序
*
* @return int
*/
@Override
public int compareTo(Student student) {
return (this.age - student.getAge() == 0 ? this.name.compareTo(student.getName()) : this.age - student.getAge());
}
}
运行结果:
备注: 因为我们重写了compareTo方法,所以当我们删去匿名的对象时,只要内容匹配,一样可以删除;并且在新增的时候,只可以增加一个内容匹配的对象。
public static void main(String[] args) {
TreeSet<Student> treeSet = new TreeSet<>();
Student s1 = new Student("小明", 22);
Student s2 = new Student("小立", 21);
Student s3 = new Student("小周", 19);
Student s4 = new Student("小王", 23);
Student s5 = new Student("小邓", 20);
treeSet.add(s1);
treeSet.add(s2);
treeSet.add(s3);
treeSet.add(s4);
treeSet.add(s5);
treeSet.remove(new Student("小明", 22));
System.out.println(treeSet.toString());
treeSet.add(new Student("小明", 22));
treeSet.add(new Student("小明", 22));
treeSet.add(new Student("小明", 22));
treeSet.add(new Student("小明", 22));
treeSet.add(new Student("小明", 22));
System.out.println("\\n" + treeSet.toString());
}
以上是关于Java集合框架 Set接口实现类--TreeSet概述及使用的主要内容,如果未能解决你的问题,请参考以下文章
Java知识33 集合框架 List接口 Map 和set多测师
Java中集合框架,Collection接口Set接口List接口Map接口,已经常用的它们的实现类,简单的JDK源码分析底层实现