首先是我的实现Comparator的类
package com.newedu.jb.day18.set;
import java.util.Comparator;
public class MyComparator implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
//默认是按从到大的顺序进行排序的
return o1.compareTo(o2);
}
}
package com.newedu.jb.day18.set;
public class Stu {
private String name;
private int age;
public Stu(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Stu() {
super();
}
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 hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Stu other = (Stu) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
package com.newedu.jb.day18.set;
import java.util.Comparator;
public class StuComparator implements Comparator<Stu> {
@Override
public int compare(Stu o1, Stu o2) {
int num = o1.getName().compareTo(o2.getName());
return num != 0 ? num : (o1.getAge() < o2.getAge() ? 1 : (o1.getAge() == o2.getAge() ? 0 : -1));
}
}
package com.newedu.jb.day18.set;
import java.util.Comparator;
import java.util.TreeSet;
/**
* TreeSet 的自定义排序:
*
*
* 构造方法:
* TreeSet(Comparator<? super E> comparator)
构造一个新的空 TreeSet,它根据指定比较器进行排序。 自定义排序
Comparator 接口:
int compare(T o1, T o2)
比较用来排序的两个参数。
boolean equals(Object obj)
指示某个其他对象是否“等于”此 Comparator
举例说明:
存储字符串类型,并且遍历
存储自定义类型,并遍历
* @author jerry
*
*/
public class TreeSetDemo2 {
public static void main(String[] args) {
MyComparator myComparator = new MyComparator();
TreeSet<String> tset = new TreeSet<String>(myComparator);
tset.add("susan");
tset.add("peter");
tset.add("jerry");
tset.add("jerry");//重复的元素不出现。
for(String item :tset){
System.out.println("集合元素:"+item);
}
System.out.println("==========自定义类型=========");
StuComparator stuComparator = new StuComparator();
TreeSet<Stu> tset1 = new TreeSet<Stu>(stuComparator);
Stu s1 = new Stu("jerry",20);
Stu s2 = new Stu("susan",19);
Stu s3 = new Stu("peter",18);
Stu s4 = new Stu("jerry",18);
tset1.add(s1);
tset1.add(s2);
tset1.add(s3);
tset1.add(s4);
for(Stu s :tset1){
System.out.println("集合元素:"+s);
}
System.out.println("=========匿名内部类的形式===========");
TreeSet<Stu> tset2 = new TreeSet<Stu>(new Comparator<Stu>(){
@Override
public int compare(Stu o1, Stu o2) {
int num = o1.getName().compareTo(o2.getName());
return num != 0 ? num : (o1.getAge() < o2.getAge() ? 1 : (o1.getAge() == o2.getAge() ? 0 : -1));
}});
tset2.add(s1);
tset2.add(s2);
tset2.add(s3);
tset2.add(s4);
for(Stu item : tset2){
System.out.println("集合元素:"+item);
}
}
}