import java.util.Comparator;
import java.util.TreeSet;
/**
* set
* / \
* HashSet TreeSet
* 1.HashSet 存储元素必须重写hashCode()与equals()方法,我们似乎没关心过;元素不重复
* HashSet底层实现是HashMap,HashMap的底层实现是:数组+链表,其存储元素分
* 2步:
* 1)判断hashCode() 如果相等 2)再判断equals()
* 2.TreeSet 存储元素可以排序,返回0去重
* 1)排序元素类必须实现java.util.lang.Comparable,重写comparaTo()方法。
* 提供空构造 new TreeSet()
* 2)提供另外的排序业务类,实现java.util.lang.Comparator,重写compare
* new TreeSet(Comparator<? super E> comparator)
*/
public class TreeSetTest {
public static void main(String[] args) {
Student st1=new Student("张三",66.5);
Student st2=new Student("李四",66.5);
Student st3=new Student("王五",80);
Student st4=new Student("张三",99);
TreeSet<Student> set=new TreeSet<Student>(new Comparator<Student>(){
@Override
public int compare(Student o1, Student o2) {
return o1.getScore()>o2.getScore()?1:(o1.getScore()==o2.getScore()?0:-1);
}});
//在添加元素的同时就排序,提供外部业务排序类(匿名类)
set.add(st1);
set.add(st2);
set.add(st3);
set.add(st4);
System.out.println(set);
//元素本身实现java.util.lang.Comparable 的comparaTo
Person p1=new Person("张三",18);
Person p2=new Person("李四",59);
Person p3=new Person("王五",28);
TreeSet<Person> set1=new TreeSet<Person>();
set1.add(p1);
set1.add(p2);
set1.add(p3);
System.out.println(set1);
}
}
//==================================================
class Student{
private String name;
private double score;
public Student() {
}
public Student(String name, double score) {
super();
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
@Override
public String toString() {
return "Student姓名:"+this.name+",学分:"+this.score;
}
}
//============================================================
class Person implements Comparable<Person>{
private String name;
private int age;
public Person() {
}
public Person(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 String toString() {
return "Person:姓名:"+this.age+",年龄:"+this.age;
}
@Override
public int compareTo(Person o) {
return this.age-o.age;
}
}
import java.util.TreeSet;
/**
* set
* / \
* HashSet TreeSet
* 1.HashSet 存储元素必须重写hashCode()与equals()方法,我们似乎没关心过;元素不重复
* HashSet底层实现是HashMap,HashMap的底层实现是:数组+链表,其存储元素分
* 2步:
* 1)判断hashCode() 如果相等 2)再判断equals()
* 2.TreeSet 存储元素可以排序,返回0去重
* 1)排序元素类必须实现java.util.lang.Comparable,重写comparaTo()方法。
* 提供空构造 new TreeSet()
* 2)提供另外的排序业务类,实现java.util.lang.Comparator,重写compare
* new TreeSet(Comparator<? super E> comparator)
*/
public class TreeSetTest {
public static void main(String[] args) {
Student st1=new Student("张三",66.5);
Student st2=new Student("李四",66.5);
Student st3=new Student("王五",80);
Student st4=new Student("张三",99);
TreeSet<Student> set=new TreeSet<Student>(new Comparator<Student>(){
@Override
public int compare(Student o1, Student o2) {
return o1.getScore()>o2.getScore()?1:(o1.getScore()==o2.getScore()?0:-1);
}});
//在添加元素的同时就排序,提供外部业务排序类(匿名类)
set.add(st1);
set.add(st2);
set.add(st3);
set.add(st4);
System.out.println(set);
//元素本身实现java.util.lang.Comparable 的comparaTo
Person p1=new Person("张三",18);
Person p2=new Person("李四",59);
Person p3=new Person("王五",28);
TreeSet<Person> set1=new TreeSet<Person>();
set1.add(p1);
set1.add(p2);
set1.add(p3);
System.out.println(set1);
}
}
//==================================================
class Student{
private String name;
private double score;
public Student() {
}
public Student(String name, double score) {
super();
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
@Override
public String toString() {
return "Student姓名:"+this.name+",学分:"+this.score;
}
}
//============================================================
class Person implements Comparable<Person>{
private String name;
private int age;
public Person() {
}
public Person(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 String toString() {
return "Person:姓名:"+this.age+",年龄:"+this.age;
}
@Override
public int compareTo(Person o) {
return this.age-o.age;
}
}