TreeSet以及存储自定义类重写compareTo()
来源:互联网 发布:linux一键搭建squid 编辑:程序博客网 时间:2024/06/05 00:58
TreeSet:是一个有序集合,其元素按照升序排列,默认是按照自然顺序排 列,也就是说TreeSet中的对象元素需要实现Comparable接口。
实现原理:红黑树,比父节点小的放左边,比父节点大的放右边,相同只存储一个,当连续三个元素还没出现分叉时,会自动将中间元素作为节点,这样会减少比较次数,提高排序效率。
TreeSet存储自定义类:当我们使用TreeSet存储自定义类时,需要在自定义类中重写compareTo方法,以提供比对形式,否在TreeSet不能对用户自定义的类型进行正确的树状排序。
实例如下:
首先自定义一个学生类
package com.zzu.java13.treeset;public class Students implements Comparable<Students>{ String stuNo ; String stuName; int score; public Students(String stuNo, String stuName, int score) { super(); this.stuNo = stuNo; this.stuName = stuName; this.score = score; } @Override public String toString() { return "Students [stuNo=" + stuNo + ", stuName=" + stuName + ", score=" + score + "]"; } public String getStuNo() { return stuNo; } public void setStuNo(String stuNo) { this.stuNo = stuNo; } public String getStuName() { return stuName; } public void setStuName(String stuName) { this.stuName = stuName; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } @Override public int compareTo(Students stu) { if(stu!=null){ if(score == stu.score){ return stuNo.compareTo(stu.stuNo); } return score - stu.score; } return 0; }}
重写的compareTo()如下:
public int compareTo(Students stu) { if(stu!=null){ if(score == stu.score){ return stuNo.compareTo(stu.stuNo); } return score - stu.score; } return 0; }
TreeSet 要注意的事项:
TreeSet 要注意的事项:
* 1、往TreeSet添加元素的时候,如果元素具备了自然顺序的特性,那么就按照元素自然顺序的特性进行排序村粗;
* 2、往TreeSet添加元素的时候,如果元素不具备自然顺序的特性,那么该元素所属的类必须要实现Comparable接口, 把元素的比较规则定义在compareTo(T o)方法上。
* 3、比较元素的时候,compareTo方法返回的是0,那么该元素就被视为重复元素,不允许添加(注意:TreeSet和hashCode、equals方法没有任何联系)
public class TreeSetDemo { public static void main(String[] args) { Set<Students> treeset = new TreeSet<Students>(); treeset.add(new Students("100","张三",58)); treeset.add(new Students("101","李四",67)); treeset.add(new Students("102","王五",93)); treeset.add(new Students("103","赵六",89)); treeset.add(new Students("104","韩七",89)); for(Students stu:treeset){ System.out.println(stu); } }}
输出结果为:
Students [stuNo=102, stuName=王五, score=93]
Students [stuNo=103, stuName=赵六, score=89]
Students [stuNo=104, stuName=韩七, score=89]
Students [stuNo=101, stuName=李四, score=67]
Students [stuNo=100, stuName=张三, score=58]
- TreeSet以及存储自定义类重写compareTo()
- TreeSet以及存储自定义类重写compareTo()续
- TreeSet类compareTo()方法重写
- TreeSet 存储自定义类型时CompareTo 方法应该怎么写
- TreeSet中类实现compareTo以及内部类中实现compareTo
- compareTo方法重写错误导致TreeSet中无法添加对象
- java treeset实现不重复存储的方式(在类对象中实例化CompareTo)
- TreeSet存储自定义对象
- TreeSet存储自定义对象
- 关于重写equals,hashcode以及compareTo方法!
- 关于重写equals,hashcode以及compareTo方法!
- 关于重写equals,hashcode以及compareTo方法!
- 关于重写equals,hashcode以及compareTo方法!
- 关于重写equals,hashcode以及compareTo方法
- 关于重写equals,hashcode以及compareTo方法
- 重写equals,hashcode以及compareTo方法
- 关于重写equals,hashcode以及compareTo方法
- java 重写compareTo方法实现类排序
- 克隆Linux系统后找不到eth0网卡问题
- 解决AndroidStudio导入项目在 Building gradle project info 一直卡住
- (一)java的介绍和基本常识
- 第十四周 项目一 验证算法 2.直接插入排序
- bzoj 2750: [HAOI2012]Road 最短路+dp
- TreeSet以及存储自定义类重写compareTo()
- 第十五周作业:Java多线程
- spark(7)-spark RDD的创建(course15)
- 四种嵌入式操作系统安全启动分析(unix、linux、qnx、vxworks)
- Vue.js 2.0和Cordova开发webApp环境搭建
- new与delete的重载
- 看图秒懂 | 昨天才发布的容器新项目Kata到底能干啥?
- 关于Linux内核引入的accept_local参数的一个问题
- 【SSH问题】open /home/oracle/.ssh/id_rsa failed: Permission denied.