SetExercise1
package SetExercise20240725;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class Exercise1 {
public static void main(String[] args) {
// Set和List的区别:
// 1.Set中不能存储重复的元素 2.Set中元素没有索引,所以说不能使用普通for遍历
Set<String> set = new TreeSet<>();
// add方法,假如加入重复的元素,那么就会假如失败
System.out.println(set.add("abc")); // 成功加入元素
System.out.println(set);
System.out.println(set.add("abc")); // 加入重复的元素则加入失败,返回false
System.out.println(set); // 集合中也确实没有重复的这个元素
set.add("bac");
set.add("cba");
set.add("acb");
System.out.println("------------------------------");
// 遍历Set
// 1.迭代器
Iterator<String> it = set.iterator();
while (it.hasNext()) {
String str = it.next();
System.out.println(str);
}
System.out.println("------------------------------");
// 2.增强for
for (String str : set) {
System.out.println(str);
}
System.out.println("------------------------------");
// 3.Lambda表达式
set.forEach(System.out::println);
}
}
TreeSetExercise1
package SetExercise20240725;
import java.util.Set;
import java.util.TreeSet;
public class TreeSetExercise {
public static void main(String[] args) {
// TreeSet是Set的实现类,其特点是:
// 1.不可以存储重复的元素 2.内部没有索引 3.可以将元素排序
// TreeSet() 构造方法就是根据元素的自然排序进行排序
// TreeSet(Comparator comparator) 根据指定的比较器进行排序
// TreeSet()
Set<Integer> treeSet = new TreeSet<>();
treeSet.add(5);
treeSet.add(3);
treeSet.add(4);
treeSet.add(1);
treeSet.add(2);
// 可见其加入元素的顺序是无序的
System.out.println(treeSet); // 输出1, 2, 3, 4, 5 但是打印集合,其中的元素是有序的
/* 加入顺序是无序的,但是在集合中的顺序是有序的,证明了TreeSet内部是具备排序的功能的,能够
根据自然排序规则,或者指定的比较器进行排序 */
// 其底层的实现逻辑是红黑树(难以分析),所以说可以进行排序,但是自然排序规则有一定的局限性,
// 所以说有时需要指定比较器进行排序
}
}
TreeSetExercise2
package SetExercise20240725;
import java.util.TreeSet;
public class TreeSetExercise2 {
public static void main(String[] args) {
// 自然排序Comparable的使用
/* 案例需求:
存储学生对象并遍历,创建TreeSet集合使用无参构造方法
要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序 */
// Comparable是一个可以用来比较的接口,要在Student类中实现这个接口
// 自然排序,就是让元素所属的类实现Comparable接口,重写compareTo(T o)方法
//创建集合对象
TreeSet<Student> ts = new TreeSet<>();
//创建学生对象
Student s1 = new Student("zhangSan",28);
Student s2 = new Student("liSi",27);
Student s3 = new Student("wangWu",29);
Student s4 = new Student("zhaoLiu",28);
Student s5 = new Student("qianQi",30);
//把学生添加到集合
ts.add(s1);
ts.add(s2);
ts.add(s3);
ts.add(s4);
ts.add(s5);
//遍历集合
for (Student student : ts) {
System.out.println(student.toString());
}
}
}
class Student implements Comparable<Student>{
private String name;
private int age;
public Student() {
this(null, 0);
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public int compareTo(Student s) {
// 按照年龄大小进行比较
int result = s.age - this.getAge();
result = result == 0 ? this.name.compareTo(s.getName()) : result;
return result;
}
}