TreeSet使用与总结
1.基础知识点
集合中元素唯一可进行自由排序
2.排序方法
2.1自然排序
排序对象必须实现了Comparable接口,否则出现转换异常。import lombok.Getter;
import lombok.Setter;
/**
* 比较对象
* @author wsz
* @date 2018年1月7日
*/
public class Person implements Comparable{
@Setter
@Getter
private int id;
@Setter
@Getter
private int age;
@Setter
@Getter
private String name;
/**
* Compares this object with the specified object for order. Returns a
* negative integer, zero, or a positive integer as this object is less
* than, equal to, or greater than the specified object.
*
* @param o the object to be compared.
* @return a negative integer, zero, or a positive integer as this object
* is less than, equal to, or greater than the specified object.
* 比较规则:
* 返回负数,倒序存储;
* 返回0,即包含重复,无法再次添加;
* 返回正数,正序存储
*/
@Override
public int compareTo(Person o) {
int temp = this.id - o.id;
if(temp == 0)return this.age - o.age;//假如id相等,可以继续比较其他字段
return temp;
}
public Person(int id, int age, String name) {
super();
this.id = id;
this.age = age;
this.name = name;
}
@Override
public String toString() {
return "Person [id=" + id + ", age=" + age + ", name=" + name + "]";
}
}
import java.util.TreeSet;
/**
* 自然排序模式
* 所比较对象必须实现Comparable接口
* @author wsz
* @date 2018年1月7日
*/
public class Demo {
public static void main(String[] args) {
//先比较id;如果id相等,则比较age。
TreeSet set = new TreeSet();
set.add(new Person(1,3,"a"));
set.add(new Person(1,2,"a"));
set.add(new Person(1,1,"a"));
set.add(new Person(2,2,"b"));
set.add(new Person(3,3,"c"));
for (Person p : set) {
System.out.println(p.toString());
}
}
}
2.2比较器方法
import java.util.Comparator;
import java.util.TreeSet;
/**
* 比较器方法
* @author wsz
* @date 2018年1月7日
*/
public class Test {
public static void main(String[] args) {
TreeSet set = new TreeSet(new Comparator() {
//先比较是否相等;若相等,则比较长度。
@Override
public int compare(String s1, String s2) {
//s1为新增的参数
//s2为集合中的数据
System.out.println(s1+"_"+s2);
int temp = s1.compareTo(s2);
if(temp == 0) return s1.length() - s2.length();
return temp;
}
});
set.add("aaaaaa");
set.add("aaa");
set.add("abc");
set.add("bcd");
set.add("cde");
set.add("aa");
for (String string : set) {
System.out.println(string);
}
}
}