1.排序的引入
- public class TreeSetDemo {
- public static void main(String[] args) {
- // 創建集合對象
- // 自然順序進行排序
- TreeSet<Integer> ts = new TreeSet<Integer>();
- // 創建元素並添加
- // 20,18,23,22,17,24,19,18,24
- ts.add(20);
- ts.add(18);
- ts.add(23);
- ts.add(22);
- ts.add(17);
- ts.add(24);
- ts.add(19);
- ts.add(18);
- ts.add(24);
- // 遍歷
- for (Integer i : ts) {
- System.out.println(i);
- }
- }
- }
public class TreeSetDemo {
public static void main(String[] args) {
// 創建集合對象
// 自然順序進行排序
TreeSet<Integer> ts = new TreeSet<Integer>();
// 創建元素並添加
// 20,18,23,22,17,24,19,18,24
ts.add(20);
ts.add(18);
ts.add(23);
ts.add(22);
ts.add(17);
ts.add(24);
ts.add(19);
ts.add(18);
ts.add(24);
// 遍歷
for (Integer i : ts) {
System.out.println(i);
}
}
}
- public class TreeSetDemo02 {
- public static void main(String[] args) {
- TreeSet<Student> ts=new TreeSet<Student>();
- //創建元素對象
- Student s1=new Student(“zhangsan”,20);
- Student s2=new Student(“lis”,22);
- Student s3=new Student(“wangwu”,24);
- Student s4=new Student(“chenliu”,26);
- Student s5=new Student(“zhangsan”,22);
- Student s6=new Student(“qianqi”,24);
- //將元素對象添加到集合對象中
- ts.add(s1);
- ts.add(s2);
- ts.add(s3);
- ts.add(s4);
- ts.add(s5);
- ts.add(s6);
- //遍歷
- for(Student s:ts){
- System.out.println(s.getName()+”———–”+s.getAge());
- }
- }
- }
public class TreeSetDemo02 {
public static void main(String[] args) {
TreeSet<Student> ts=new TreeSet<Student>();
//創建元素對象
Student s1=new Student("zhangsan",20);
Student s2=new Student("lis",22);
Student s3=new Student("wangwu",24);
Student s4=new Student("chenliu",26);
Student s5=new Student("zhangsan",22);
Student s6=new Student("qianqi",24);
//將元素對象添加到集合對象中
ts.add(s1);
ts.add(s2);
ts.add(s3);
ts.add(s4);
ts.add(s5);
ts.add(s6);
//遍歷
for(Student s:ts){
System.out.println(s.getName()+"-----------"+s.getAge());
}
}
}
- public class Student {
- private String name;
- private int age;
- public Student() {
- super();
- // TODO Auto-generated constructor stub
- }
- public Student(String name, int age) {
- super();
- 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;
- }
- }
public class Student {
private String name;
private int age;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String name, int age) {
super();
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;
}
}
運行結果:
2.自然排序
- package xfcy_04;
- /**
- * Student類
- * @author 曉風殘月
- *
- */
- public class Student implements Comparable<Student> {
- private String name;
- private int age;
- public Student() {
- super();
- // TODO Auto-generated constructor stub
- }
- public Student(String name, int age) {
- super();
- 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 int compareTo(Student s) {
- //return -1; //-1表示放在紅黑樹的左邊,即逆序輸出
- //return 1; //1表示放在紅黑樹的右邊,即順序輸出
- //return o; //表示元素相同,僅存放第一個元素
- //主要條件 姓名的長度,如果姓名長度小的就放在左子樹,否則放在右子樹
- int num=this.name.length()-s.name.length();
- //姓名的長度相同,不代表內容相同,如果按字典順序此 String 對象位於參數字符串之前,則比較結果爲一個負整數。
- //如果按字典順序此 String 對象位於參數字符串之後,則比較結果爲一個正整數。
- //如果這兩個字符串相等,則結果爲 0
- int num1=num==0?this.name.compareTo(s.name):num;
- //姓名的長度和內容相同,不代表年齡相同,所以還要判斷年齡
- int num2=num1==0?this.age-s.age:num1;
- return num2;
- }
- }
package xfcy_04;
/**
* Student類
* @author 曉風殘月
*
*/
public class Student implements Comparable<Student> {
private String name;
private int age;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String name, int age) {
super();
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 int compareTo(Student s) {
//return -1; //-1表示放在紅黑樹的左邊,即逆序輸出
//return 1; //1表示放在紅黑樹的右邊,即順序輸出
//return o; //表示元素相同,僅存放第一個元素
//主要條件 姓名的長度,如果姓名長度小的就放在左子樹,否則放在右子樹
int num=this.name.length()-s.name.length();
//姓名的長度相同,不代表內容相同,如果按字典順序此 String 對象位於參數字符串之前,則比較結果爲一個負整數。
//如果按字典順序此 String 對象位於參數字符串之後,則比較結果爲一個正整數。
//如果這兩個字符串相等,則結果爲 0
int num1=num==0?this.name.compareTo(s.name):num;
//姓名的長度和內容相同,不代表年齡相同,所以還要判斷年齡
int num2=num1==0?this.age-s.age:num1;
return num2;
}
}
- package xfcy_04;
- import java.util.TreeSet;
- /*
- * TreeSet存儲自定義對象並保證排序和唯一。
- *
- * 需求:請按照姓名的長度排序
- */
- public class TreeSetDemo02 {
- public static void main(String[] args) {
- //創建集合對象
- TreeSet<Student> ts=new TreeSet<Student>();
- //創建元素對象
- Student s1=new Student(“zhangsan”,20);
- Student s2=new Student(“lis”,22);
- Student s3=new Student(“wangwu”,24);
- Student s4=new Student(“chenliu”,26);
- Student s5=new Student(“zhangsan”,22);
- Student s6=new Student(“qianqi”,24);
- //將元素對象添加到集合對象中
- ts.add(s1);
- ts.add(s2);
- ts.add(s3);
- ts.add(s4);
- ts.add(s5);
- ts.add(s6);
- //遍歷
- for(Student s:ts){
- System.out.println(s.getName()+”———–”+s.getAge());
- }
- }
- }
package xfcy_04;
import java.util.TreeSet;
/*
* TreeSet存儲自定義對象並保證排序和唯一。
*
* 需求:請按照姓名的長度排序
*/
public class TreeSetDemo02 {
public static void main(String[] args) {
//創建集合對象
TreeSet<Student> ts=new TreeSet<Student>();
//創建元素對象
Student s1=new Student("zhangsan",20);
Student s2=new Student("lis",22);
Student s3=new Student("wangwu",24);
Student s4=new Student("chenliu",26);
Student s5=new Student("zhangsan",22);
Student s6=new Student("qianqi",24);
//將元素對象添加到集合對象中
ts.add(s1);
ts.add(s2);
ts.add(s3);
ts.add(s4);
ts.add(s5);
ts.add(s6);
//遍歷
for(Student s:ts){
System.out.println(s.getName()+"-----------"+s.getAge());
}
}
}
3、比較器排序
- package xfcy_04;
- import java.util.TreeSet;
- /*
- * TreeSet存儲自定義對象並保證排序和唯一。
- *
- * 需求:請按照姓名的長度排序
- */
- public class TreeSetDemo02 {
- public static void main(String[] args) {
- //創建集合對象
- //TreeSet(Comparator<? super E> comparator) 構造一個新的空 TreeSet,它根據指定比較器進行排序。
- TreeSet<Student> ts=new TreeSet<Student>(new MyComparator());
- //創建元素對象
- Student s1=new Student(“zhangsan”,20);
- Student s2=new Student(“lis”,22);
- Student s3=new Student(“wangwu”,24);
- Student s4=new Student(“chenliu”,26);
- Student s5=new Student(“zhangsan”,22);
- Student s6=new Student(“qianqi”,24);
- //將元素對象添加到集合對象中
- ts.add(s1);
- ts.add(s2);
- ts.add(s3);
- ts.add(s4);
- ts.add(s5);
- ts.add(s6);
- //遍歷
- for(Student s:ts){
- System.out.println(s.getName()+”———–”+s.getAge());
- }
- }
- }
package xfcy_04;
import java.util.TreeSet;
/*
* TreeSet存儲自定義對象並保證排序和唯一。
*
* 需求:請按照姓名的長度排序
*/
public class TreeSetDemo02 {
public static void main(String[] args) {
//創建集合對象
//TreeSet(Comparator<? super E> comparator) 構造一個新的空 TreeSet,它根據指定比較器進行排序。
TreeSet<Student> ts=new TreeSet<Student>(new MyComparator());
//創建元素對象
Student s1=new Student("zhangsan",20);
Student s2=new Student("lis",22);
Student s3=new Student("wangwu",24);
Student s4=new Student("chenliu",26);
Student s5=new Student("zhangsan",22);
Student s6=new Student("qianqi",24);
//將元素對象添加到集合對象中
ts.add(s1);
ts.add(s2);
ts.add(s3);
ts.add(s4);
ts.add(s5);
ts.add(s6);
//遍歷
for(Student s:ts){
System.out.println(s.getName()+"-----------"+s.getAge());
}
}
}
- package xfcy_04;
- import java.util.Comparator;
- public class MyComparator implements Comparator<Student>{
- @Override
- public int compare(Student s1,Student s2) {
- // 姓名長度
- int num = s1.getName().length() - s2.getName().length();
- // 姓名內容
- int num2 = num == 0 ? s1.getName().compareTo(s2.getName()) : num;
- // 年齡
- int num3 = num2 == 0 ? s1.getAge() - s2.getAge() : num2;
- return num3;
- }
- }
package xfcy_04;
import java.util.Comparator;
public class MyComparator implements Comparator<Student>{
@Override
public int compare(Student s1,Student s2) {
// 姓名長度
int num = s1.getName().length() - s2.getName().length();
// 姓名內容
int num2 = num == 0 ? s1.getName().compareTo(s2.getName()) : num;
// 年齡
int num3 = num2 == 0 ? s1.getAge() - s2.getAge() : num2;
return num3;
}
}
學生類(不需要繼承Comparetable接口)
- package xfcy_04;
- /**
- * Student類
- * @author 曉風殘月
- *
- */
- public class Student{
- private String name;
- private int age;
- public Student() {
- super();
- // TODO Auto-generated constructor stub
- }
- public Student(String name, int age) {
- super();
- 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;
- }
- }
package xfcy_04;
/**
* Student類
* @author 曉風殘月
*
*/
public class Student{
private String name;
private int age;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String name, int age) {
super();
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;
}
}
4.比較器修改
- public class TreeSetDemo {
- public static void main(String[] args) {
- // 如果一個方法的參數是接口,那麼真正要的是接口的實現類的對象
- // 而匿名內部類就可以實現這個東西
- TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {
- @Override
- public int compare(Student s1, Student s2) {
- // 姓名長度
- int num = s1.getName().length() - s2.getName().length();
- // 姓名內容
- int num2 = num == 0 ? s1.getName().compareTo(s2.getName())
- : num;
- // 年齡
- int num3 = num2 == 0 ? s1.getAge() - s2.getAge() : num2;
- return num3;
- }
- });
- // 創建元素
- Student s1 = new Student(“linqingxia”, 27);
- Student s2 = new Student(“zhangguorong”, 29);
- Student s3 = new Student(“wanglihong”, 23);
- Student s4 = new Student(“linqingxia”, 27);
- Student s5 = new Student(“liushishi”, 22);
- Student s6 = new Student(“wuqilong”, 40);
- Student s7 = new Student(“fengqingy”, 22);
- Student s8 = new Student(“linqingxia”, 29);
- // 添加元素
- ts.add(s1);
- ts.add(s2);
- ts.add(s3);
- ts.add(s4);
- ts.add(s5);
- ts.add(s6);
- ts.add(s7);
- ts.add(s8);
- // 遍歷
- for (Student s : ts) {
- System.out.println(s.getName() + ”—” + s.getAge());
- }
- }
- }
public class TreeSetDemo {
public static void main(String[] args) {
// 如果一個方法的參數是接口,那麼真正要的是接口的實現類的對象
// 而匿名內部類就可以實現這個東西
TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
// 姓名長度
int num = s1.getName().length() - s2.getName().length();
// 姓名內容
int num2 = num == 0 ? s1.getName().compareTo(s2.getName())
: num;
// 年齡
int num3 = num2 == 0 ? s1.getAge() - s2.getAge() : num2;
return num3;
}
});
// 創建元素
Student s1 = new Student("linqingxia", 27);
Student s2 = new Student("zhangguorong", 29);
Student s3 = new Student("wanglihong", 23);
Student s4 = new Student("linqingxia", 27);
Student s5 = new Student("liushishi", 22);
Student s6 = new Student("wuqilong", 40);
Student s7 = new Student("fengqingy", 22);
Student s8 = new Student("linqingxia", 29);
// 添加元素
ts.add(s1);
ts.add(s2);
ts.add(s3);
ts.add(s4);
ts.add(s5);
ts.add(s6);
ts.add(s7);
ts.add(s8);
// 遍歷
for (Student s : ts) {
System.out.println(s.getName() + "---" + s.getAge());
}
}
}
5.總結
原文鏈接:http://blog.csdn.net/xiaofei__/article/details/53138681