目錄
1,Set集合
1.1:Set集合概述和特點【應用】
1.2:Set集合的使用【應用】
2,TreeSet集合
2.1:TreeSet集合概述和特點【應用】
2.2:TreeSet集合基本使用【應用】
2.3:自然排序Comparable的使用【應用】
2.4:比較器排序Comparator的使用【應用】
2.5:兩種比較方式總結【了解】
1,Set集合
1.1:Set集合概述和特點【應用】
- 不可以存儲重複元素
- 沒有索引,不能使用普通for循環周遊
1.2:Set集合的使用【應用】
存儲字元串并周遊
public class MySet1 {
public static void main(String[] args) {
//建立集合對象
Set<String> set = new TreeSet<>();
//添加元素
set.add("ccc");
set.add("aaa");
set.add("aaa");
set.add("bbb");
// for (int i = 0; i < set.size(); i++) {
// //Set集合是沒有索引的,是以不能使用通過索引擷取元素的方法
// }
//周遊集合
Iterator<String> it = set.iterator();
while (it.hasNext()){
String s = it.next();
System.out.println(s);
}
System.out.println("-----------------------------------");
for (String s : set) {
System.out.println(s);
}
}
}
2,TreeSet集合
2.1:TreeSet集合概述和特點【應用】
- 不可以存儲重複元素
- 沒有索引
- 可以将元素按照規則進行排序
- TreeSet():根據其元素的自然排序進行排序
- TreeSet(Comparator comparator) :根據指定的比較器進行排序
2.2:TreeSet集合基本使用【應用】
public class TreeSetDemo01 {
public static void main(String[] args) {
//建立集合對象
TreeSet<Integer> ts = new TreeSet<Integer>();
//添加元素
ts.add(10);
ts.add(40);
ts.add(30);
ts.add(50);
ts.add(20);
ts.add(30);
//周遊集合
for(Integer i : ts) {
System.out.println(i);
}
}
}
2.3:自然排序Comparable的使用【應用】
- 案例需求
- 存儲學生對象并周遊,建立TreeSet集合使用無參構造方法
- 要求:按照年齡從小到大排序,年齡相同時,按照姓名的字母順序排序
- 實作步驟
- 使用空參構造建立TreeSet集合
- 用TreeSet集合存儲自定義對象,無參構造方法使用的是自然排序對元素進行排序的
- 自定義的Student類實作Comparable接口
- 自然排序,就是讓元素所屬的類實作Comparable接口,重寫compareTo(T o)方法
- 重寫接口中的compareTo方法
- 重寫方法時,一定要注意排序規則必須按照要求的主要條件和次要條件來寫
-
代碼實作
學生類
public class Student implements Comparable<Student>{
private String name;
private int age;
public Student() {
}
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 o) {
//按照對象的年齡進行排序
//主要判斷條件: 按照年齡從小到大排序
int result = this.age - o.age;
//次要判斷條件: 年齡相同時,按照姓名的字母順序排序
result = result == 0 ? this.name.compareTo(o.getName()) : result;
return result;
}
}
public class MyTreeSet2 {
public static void main(String[] args) {
//建立集合對象
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);
}
}
}
2.4:比較器排序Comparator的使用【應用】
- 案例需求
- 存儲老師對象并周遊,建立TreeSet集合使用帶參構造方法
- 要求:按照年齡從小到大排序,年齡相同時,按照姓名的字母順序排序
- 實作步驟
- 用TreeSet集合存儲自定義對象,帶參構造方法使用的是比較器排序對元素進行排序的
- 比較器排序,就是讓集合構造方法接收Comparator的實作類對象,重寫compare(T o1,T o2)方法
- 重寫方法時,一定要注意排序規則必須按照要求的主要條件和次要條件來寫
-
代碼實作
老師類
public class Teacher {
private String name;
private int age;
public Teacher() {
}
public Teacher(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 "Teacher{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class MyTreeSet4 {
public static void main(String[] args) {
//建立集合對象
TreeSet<Teacher> ts = new TreeSet<>(new Comparator<Teacher>() {
@Override
public int compare(Teacher o1, Teacher o2) {
//o1表示現在要存入的那個元素
//o2表示已經存入到集合中的元素
//主要條件
int result = o1.getAge() - o2.getAge();
//次要條件
result = result == 0 ? o1.getName().compareTo(o2.getName()) : result;
return result;
}
});
//建立老師對象
Teacher t1 = new Teacher("zhangsan",23);
Teacher t2 = new Teacher("lisi",22);
Teacher t3 = new Teacher("wangwu",24);
Teacher t4 = new Teacher("zhaoliu",24);
//把老師添加到集合
ts.add(t1);
ts.add(t2);
ts.add(t3);
ts.add(t4);
//周遊集合
for (Teacher teacher : ts) {
System.out.println(teacher);
}
}
}
2.5:兩種比較方式總結【了解】
- 兩種比較方式小結
- 自然排序: 自定義類實作Comparable接口,重寫compareTo方法,根據傳回值進行排序
- 比較器排序: 建立TreeSet對象的時候傳遞Comparator的實作類對象,重寫compare方法,根據傳回值進行排序
- 在使用的時候,預設使用自然排序,當自然排序不滿足現在的需求時,必須使用比較器排序
- 兩種方式中關于傳回值的規則
- 如果傳回值為負數,表示目前存入的元素是較小值,存左邊
- 如果傳回值為0,表示目前存入的元素跟集合中元素重複了,不存
- 如果傳回值為正數,表示目前存入的元素是較大值,存右邊