JAVA中TreeSet集合存储类,类必须实现Compareble接口
来源:互联网 发布:南京java程序员工资 编辑:程序博客网 时间:2024/06/13 02:37
TreeSet是有序不可重复集,具有以下特点:
1、数据会按自然排序(可以理解为从小到大排序)
2、不可存储null
3、数据不可重复
4、非线程安全
数字会从小到大进行排序—–例子:
package com.ckinghan.collectionDemo;import java.util.Date;import java.util.Set;import java.util.TreeSet;public class TreeSetDemo { /** * * @描述:TreeSet集合的特点: * 1、数据会按自然排序(可以理解为从小到大排序) * 2、不可存储null * 3、数据不可重复 * 4、非线程安全 * * @时间:2017年5月9日22:41:41 * @注意: * @作者:Ckinghan * @param args */ public static void main(String[] args) { /** * 创建一个数字类型的treeSet有序不重复集并赋Integer类型的值 * 查看集合的结果,会按从小到大的顺序的排序 */ Set<Integer> set = new TreeSet<>(); set.add(1); set.add(9); set.add(4); set.add(2); set.add(5); set.add(8); set.add(3); set.add(1); System.out.println(set); }}执行结果:[1, 2, 3, 4, 5, 8, 9]从结果上可以发现,数值“1”分明存储了两次,却只能留存一个,这说明TreeSet不能保存重复的值,并且结果是从小到大排序的
字符串会将每个字符的ACIIS拿出来进行对比并排序—–例子:
package com.ckinghan.collectionDemo;import java.util.Date;import java.util.Set;import java.util.TreeSet;public class TreeSetDemo { /** * * @描述:TreeSet集合的特点: * 1、数据会按自然排序(可以理解为从小到大排序) * 2、不可存储null * 3、数据不可重复 * 4、非线程安全 * * @时间:2017年5月9日22:41:41 * @注意: * @作者:Ckinghan * @param args */ public static void main(String[] args) { /** * 创建一个String类型的TreeSet集合 * 因为String实现了Comparable接口,所以可以在TreeSet集合存储并排序 */ Set<String> set2 = new TreeSet<String>(); set2.add("wod"); set2.add("abe"); set2.add("abc"); System.out.println(set2); }}执行结果:[abc, abe, wod]可以看出,字符串是按字母从小到大排序的。
对于程序员所写的类,如果没有实现Comparable接口,是无法放到treeSet集合中的,示例代码如下:
package com.ckinghan.collectionDemo;import java.util.Date;/** * @author:Ckinghan * @date:2017年5月9日22:36:28 * @描述:测试实体类,用以实现Comparable接口,在treeSet集合中进行排序,本次代码没有实现Comparable接口 */public class Enity { public Integer id; public String tableName; public Date createTime; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getTableName() { return tableName; } public void setTableName(String tableName) { this.tableName = tableName; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public Enity() { super(); } public Enity(Integer id, String tableName, Date createTime) { super(); this.id = id; this.tableName = tableName; this.createTime = createTime; }}测试代码如下:package com.ckinghan.collectionDemo;import java.util.Date;import java.util.Set;import java.util.TreeSet;public class TreeSetDemo { /** * * @描述:TreeSet集合的特点: * 1、数据会按自然排序(可以理解为从小到大排序) * 2、不可存储null * 3、数据不可重复 * 4、非线程安全 * * @时间:2017年5月9日22:41:41 * @注意: * @作者:Ckinghan * @param args */ public static void main(String[] args) { /** * 如果类没有实现Comparable接口,是无法存储在treeSet集合中的 */ Set<Enity> set3 = new TreeSet<>(); set3.add(new Enity(1, "employeeInfo", new Date())); set3.add(new Enity(2, "employeeInfo", new Date())); set3.add(new Enity(3, "employeeInfo", new Date())); set3.add(new Enity(4, "employeeInfo", new Date())); set3.add(new Enity(1, "employeeInfo", new Date())); System.out.println(set3); }}运行结果如下 :Exception in thread "main" java.lang.ClassCastException: com.ckinghan.collectionDemo.Enity cannot be cast to java.lang.Comparable at java.util.TreeMap.compare(TreeMap.java:1294) at java.util.TreeMap.put(TreeMap.java:538) at java.util.TreeSet.add(TreeSet.java:255) at com.ckinghan.collectionDemo.TreeSetDemo.main(TreeSetDemo.java:55)
程序员自己定义 的类,要实现了Comparable接口后方可存储到treeSet集合中,示例代码如下 :
package com.ckinghan.collectionDemo;import java.util.Date;/** * @author:Ckinghan * @date:2017年5月9日22:36:28 * @描述:测试实体类,用以实现compareTo接口,在treeSet集合中进行排序 */public class Enity implements Comparable<Enity>{ public Integer id; @Override public String toString() { return "Enity [id=" + id + ", tableName=" + tableName + ", createTime=" + createTime + "]"; } public String tableName; public Date createTime; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getTableName() { return tableName; } public void setTableName(String tableName) { this.tableName = tableName; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public Enity() { super(); } public Enity(Integer id, String tableName, Date createTime) { super(); this.id = id; this.tableName = tableName; this.createTime = createTime; } /** * 重写compareTo方法,否则无法存储到treeSet集合中 */ @Override public int compareTo(Enity o) { //对比是否this大于o int val = this.id - o.id; //如果两者相同 if(val == 0){ //判断tableName是否为空,如果不为空,则判断两者的tableName是否相等 if(this.tableName != null ){ //获取对比的值 val = this.tableName.compareTo(o.tableName); //如果两都的tableName相等,则判断两都的createTime是否相等 if(val == 0){ //注意:这里不建议使用getTime()再相减,因为如果时间相差过大,可能超过int的最大值,即使不大于int的最大值,最后还是要再强转为int val = this.createTime.compareTo(o.createTime); } } } return val; }}测试类代码:package com.ckinghan.collectionDemo;import java.util.Date;import java.util.Set;import java.util.TreeSet;public class TreeSetDemo { /** * * @描述:TreeSet集合的特点: * 1、数据会按自然排序(可以理解为从小到大排序) * 2、不可存储null * 3、数据不可重复 * 4、非线程安全 * * @时间:2017年5月9日22:41:41 * @注意: * @作者:Ckinghan * @param args */ public static void main(String[] args) { /** * 如果类没有实现compareTo接口,是无法存储在treeSet集合中的 */ Set<Enity> set3 = new TreeSet<>(); set3.add(new Enity(1, "employeeInfo", new Date())); set3.add(new Enity(2, "employeeInfo", new Date())); set3.add(new Enity(3, "employeeInfo", new Date())); set3.add(new Enity(4, "employeeInfo", new Date())); set3.add(new Enity(1, "employeeInfo", new Date())); /** * 循环打印set3集合中的内容 */ for(Enity enity : set3){ System.out.println(enity); } }}执行结果:Enity [id=1, tableName=employeeInfo, createTime=Tue May 09 23:16:06 CST 2017]Enity [id=2, tableName=employeeInfo, createTime=Tue May 09 23:16:06 CST 2017]Enity [id=3, tableName=employeeInfo, createTime=Tue May 09 23:16:06 CST 2017]Enity [id=4, tableName=employeeInfo, createTime=Tue May 09 23:16:06 CST 2017]注意:我添加了两个ID为1的数据,结果却出现了一个,应该是最终的返回值 为0影响的,但我也不敢肯定,因为在添加第一条数据时,返回的也是0。还需要再查询资料才能确定。
找到了一篇文章 ,它说返加0时确实会做为是否重复的参考标准之一,但为什么第一个添加的值返回的也是0,去可以添加呢?还要找相关的资料才行
参考资料一:http://blog.csdn.net/yxb_yingu/article/details/52194988
0 0
- JAVA中TreeSet集合存储类,类必须实现Compareble接口
- Java集合类Treeset实现细节
- JAVA 集合类 TREESET
- JavaSE入门学习36:Java集合框架之Set接口及其实现类HashSet和TreeSet
- Java集合中TreeSet的实现原理
- 单列集合set中实现类HashSet和TreeSet
- java程序员从笨鸟到菜鸟之(二十六)集合之Set接口的子实现类HashSet,TreeSet
- java treeset实现不重复存储的方式(在类对象中实例化CompareTo)
- Java数据结构与算法之数据结构-逻辑结构-集合(七)------集合之Set接口和HashSet和TreeSet、LinkedHashSet实现类总结
- set集合 HashSet: TreeSet实现Comparable接口,覆盖compareTo方法。 类实现Comparator接口,覆盖compare方法。
- java集合类TreeMap和TreeSet
- java集合类TreeMap和TreeSet
- java集合类TreeMap和TreeSet
- java集合类TreeMap和TreeSet
- java集合类TreeMap和TreeSet
- java集合类TreeMap和TreeSet
- Java集合类HashSet、TreeSet比较
- java集合类TreeMap和TreeSet
- 数据库笔记
- pycharm的字体修改与风格
- linux 登陆ftp及文件上传及下载 【转】
- EXCEL中输入的数字无法正常显示变成科学计数法
- web框架之利用python的反射模拟小web框架(二)动态导入模块
- JAVA中TreeSet集合存储类,类必须实现Compareble接口
- NTFS与FAT32区别
- 家谱等人物关系图的绘制
- 一 dileber代码讲解、activity基类
- PhpStorm的Xdebug调试
- SUSE Linux Ubuntu 下安装mysql遇到的问题一。
- 第八届山东省ACM省赛总结
- 在Linux中搭建一个FTP服务器 【转】
- 序列化和反序列化的简单理解