java怎么帮set集合对象排序_JAVA基础(TreeSet存储自定义对象比较排序)

1,TreeSet存储自定义对象

存储Person对象 bean类里面必须实现Comparable 方法。(implements  Comparable)

TreeSet集合是用来对象元素进行排序的,同样他也可以保证元素的唯一

当compareTo方法返回0的时候集合中只有一个元素

当compareTo方法返回正数的时候集合会怎么存就怎么取

当compareTo方法返回负数的时候集合会倒序存储

2,代码实现

【1】图解

按年龄进行排序

10789c2c85e35828d06414f2bd37067d.png

2d5037e6e3b790d379012a9492ea6136.png

树。先去拿compareTo 去比较。 负数在左面。 正数在右面。输出结果。李四,张三,赵六,王五。

7bd7cc7be6d224bc8ca06ca93c1b2089.png

public static void demo2() {

TreeSet ts = new TreeSet<>();

ts.add(new Person("张三", 23));

ts.add(new Person("李四", 13));

ts.add(new Person("周七", 13));

ts.add(new Person("王五", 43));

ts.add(new Person("赵六", 33));

System.out.println(ts);

}

【2】bean 类

public class Person implements Comparable {

private String name;

private int age;

public Person() {

super();

}

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 [name=" + name + ", age=" + age + "]";

}

/*@Override

public boolean equals(Object obj) {

System.out.println("执行了吗");

Person p = (Person)obj;

return this.name.equals(p.name) && this.age == p.age;

}

@Override

public int hashCode() {

final int NUM = 38;

return name.hashCode() * NUM + age;

}*/

/*

* 为什么是31?

* 1,31是一个质数,质数是能被1和自己本身整除的数

* 2,31这个数既不大也不小

* 3,31这个数好算,2的五次方-1,2向左移动5位

*/

@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;                        //直接返回true

if (obj == null)                        //传入的对象为null

return false;                        //返回false

if (getClass() != obj.getClass())        //判断两个对象对应的字节码文件是否是同一个字节码

return false;                        //如果不是直接返回false

Person other = (Person) obj;            //向下转型

if (age != other.age)                    //调用对象的年龄不等于传入对象的年龄

return false;                        //返回false

if (name == null) {                        //调用对象的姓名为null

if (other.name != null)                //传入对象的姓名不为null

return false;                    //返回false

} else if (!name.equals(other.name))    //调用对象的姓名不等于传入对象的姓名

return false;                        //返回false

return true;                            //返回true

}

/*@Override

//按照年龄排序

public int compareTo(Person o) {

int num = this.age - o.age;                //年龄是比较的主要条件

return num == 0 ? this.name.compareTo(o.name) : num;//姓名是比较的次要条件

}*/

/*@Override

//按照姓名排序

public int compareTo(Person o) {

int num = this.name.compareTo(o.name);        //姓名是主要条件

return num == 0 ? this.age - o.age : num;    //年龄是次要条件

}*/

/*

* aaa

* bbb

*/

public int compareTo(Person o) {

int length = this.name.length() - o.name.length();                //比较长度为主要条件

int num = length == 0 ? this.name.compareTo(o.name) : length;    //比较内容为次要条件

return num == 0 ? this.age - o.age : num;                        //比较年龄为次要条件

}

}

标签:JAVA,name,自定义,int,age,Person,return,public,TreeSet

来源: https://blog.csdn.net/Cricket_7/article/details/94379343

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值