Set 一(TreeSet与HashSet)十四

来源:互联网 发布:mac 虚拟光驱软件 编辑:程序博客网 时间:2024/05/20 21:18
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;
}
}
原创粉丝点击