JAVA高階基礎(9)---Set的典型實現(二):TreeSet
阿新 • • 發佈:2018-11-26
TreeSet
TreeSet是基於TreeMap實現的。不是執行緒安全的。TreeSet可以使用元素的自然順序進行排序,或者定製排序
注:更多詳細方法請自行在 API 上查詢
排序方式
自然排序、定製排序
自然排序
實現 Comparable 介面,需要實現其 comparaTo() 方法。
Integer類:
compareTo(Integer o)
this == o 返回0 this > o 返回大於0的值, this < o 返回小於0的值
String類 :
compareTo(String str)
按照字典順序(字母表的順序)進行字串的比較 本質上比較的是字元的 Unicode 值
package org.lanqiao.setdemo; public class Student { private String name; private Integer 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 Integer getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; } /* * 實現compareTo方法。則是根據我們的比較規則,來定義,針對我們自己自定義的型別 * 進行比較的方式 * 1 我認為。如果兩個同學的年齡相等的話,那麼這兩個同學就是同一個人 * 2 如果年齡相等,則按照姓名的字典順序進行排序 */ /*@Override public int compareTo(Object o) { Student st = (Student)o; int res = age.compareTo(st.getAge()); if(res == 0) { res = name.compareTo(st.getName()); } return res; }*/ }
package org.lanqiao.setdemo; import java.util.Iterator; import java.util.Set; import java.util.TreeSet; public class TreeSetDemo { /* * TreeSet 可以對存入其中的元素進行排序 * 排序的方式由兩種:自然排序,定製排序 * 自然排序:實現Comparable */ public static void main(String[] args) { Set set = new TreeSet(); /*set.add(2); set.add(5); set.add(1); set.add(6); set.add(9);*/ /*set.add("b"); set.add("cd"); set.add("bcd"); set.add("abcd");*/ /*Student stu1 = new Student("aa",21); Student stu2 = new Student("dd",18); Student stu3 = new Student("cc",18); Student stu4 = new Student("bb",22); Student stu5 = new Student("ff",19); set.add(stu1); set.add(stu2); set.add(stu3); set.add(stu4); set.add(stu5);*/ set.add("李四"); set.add("王五"); set.add("張三"); Iterator iter = set.iterator(); while(iter.hasNext()) { System.out.println(iter.next()); } char a = '張'; System.out.println((int)a); char b = '王'; System.out.println((int)b); char c = '李'; System.out.println((int)c); } }
定製排序
不是由儲存的資料型別來決定資料的排序方式,而是將資料的排序的方式交由容器來定義,不同的容器可以選擇不同的排序方式。
實現Comparator介面,實現 compare()
package org.lanqiao.setdemo;
import java.util.Comparator;
public class MyComparetor implements Comparator{
@Override
public int compare(Object o1, Object o2) {
Integer i1 = (Integer)o1;
Integer i2 = (Integer)o2;
return i1.compareTo(i2);
}
}
package org.lanqiao.setdemo;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class TreeSetDemo2 {
public static void main(String[] args) {
Set set = new TreeSet(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
Student st1 = (Student)o1;
Student st2 = (Student)o2;
int res = st1.getAge().compareTo(st2.getAge());
if(res == 0) {
res = st1.getName().compareTo(st2.getName());
}
return res;
}
}) ;
/*set.add(1);
set.add(5);
set.add(2);
set.add(6);
set.add(4);*/
Student stu1 = new Student("aa",21);
Student stu2 = new Student("dd",18);
Student stu3 = new Student("cc",18);
Student stu4 = new Student("bb",22);
Student stu5 = new Student("ff",19);
set.add(stu1);
set.add(stu2);
set.add(stu3);
set.add(stu4);
set.add(stu5);
Iterator iter = set.iterator();
while(iter.hasNext()) {
System.out.println(iter.next());
}
}
/*public class MyComparetor2 implements Comparator{
@Override
public int compare(Object o1, Object o2) {
Integer i1 = (Integer)o1;
Integer i2 = (Integer)o2;
return i1.compareTo(i2);
}
}*/
}
實現方式有三種:
- 使用外部類來實現介面
- 使用內部類來實現介面
- 使用匿名內部類來實現介面