Comparator定制比较器
-
TreeSet存储对象元素的第二种方法
-
可以不让元素实现Comparable接口了
案例:字符串长度相等时,判断元素是否重复
public static void comparatorStringTest(){
String str = "abc";
String str1 = "xyz";
String str2 = "hello";
String str3 = "hello";
Set<String> set = new TreeSet<>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
int length = o1.length() - o2.length();
int compareTo = o1.compareTo(o2);
return length == 0 ? compareTo : length;
}
});
set.add(str);
set.add(str1);
set.add(str2);
set.add(str3);
//长度:3-[abc, xyz, hello]
System.out.println("长度:"+set.size()+"-"+set);
}
main()
package com.li.changGe.collections.setGather;
import com.li.changGe.pojo.Student;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
public class TreeSetImplementsComparatorDemo01 {
public static void main(String[] args) {
//new对象直接实现Comparator接口
Set<Student> set = new TreeSet(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
int name = o1.name.compareTo(o2.name);
int age = o1.age - o2.age;
int sex = o1.sex - o2.sex;
return name == 0 ? age - sex : name;
}//compare
});
set.add(new Student("长歌",18,'女'));
set.add(new Student("长歌",18,'女'));
/**
* 长度:1-[Student{name='长歌', age=18, sex=女}
* ]
*/
System.out.println("长度:"+set.size()+"-"+set);
//-----------------------------------------------------
comparatorStringTest();
}
}