java实现有序treeset_【Java基础】有序集合TreeSet排序方法

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);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值