JAVA基础(TreeSet存储自定义对象比较排序)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JAVA基础(TreeSet存储自定义对象比较排序),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3967字,纯文字阅读大概需要6分钟。
内容图文
![JAVA基础(TreeSet存储自定义对象比较排序)](/upload/InfoBanner/zyjiaocheng/782/b43b2377fd0449e08169ce532dc23125.jpg)
1,TreeSet存储自定义对象
-
存储Person对象 bean类里面必须实现Comparable 方法。(implements Comparable)
-
TreeSet集合是用来对象元素进行排序的,同样他也可以保证元素的唯一
-
当compareTo方法返回0的时候集合中只有一个元素
-
当compareTo方法返回正数的时候集合会怎么存就怎么取
-
当compareTo方法返回负数的时候集合会倒序存储
2,代码实现
【1】图解
-
按年龄进行排序
-
树。先去拿compareTo 去比较。 负数在左面。 正数在右面。输出结果。李四,张三,赵六,王五。
public static void demo2() {
????????TreeSet<Person> 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<Person> {
????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基础(TreeSet存储自定义对象比较排序)全部内容,希望文章能够帮你解决JAVA基础(TreeSet存储自定义对象比较排序)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。