- 浏览: 2078579 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (366)
- hadoop (91)
- DB (2)
- vmware (0)
- python (49)
- Java (72)
- Linux (57)
- 多线程 (2)
- hive (1)
- hbase (3)
- mongodb (5)
- Hibernate (3)
- nodejs (1)
- 模式与重构 (1)
- 持续集成CI (4)
- Mysql (2)
- chorme (1)
- 软件开发 (0)
- 敏捷 (5)
- maven (3)
- windows (7)
- 测试驱动 (1)
- scala (3)
- Jetty (0)
- android (1)
- eclipse (1)
- 设计模式 (1)
- 面向对象设计 (2)
- oracle (3)
- cassandra (15)
- pig (3)
- rails (1)
- redis (4)
- ruby (1)
- storm (0)
- 实时运算 (3)
- scribe (1)
- hadoop源码 (3)
- cassandra jna (1)
- Kafka (2)
- Sublime (2)
- C++ (2)
- C (1)
- 版本控制 (1)
- 服务器 (1)
- docker (0)
- flink (1)
最新评论
-
伍大都督:
解释太到位了,感谢分享
理解Linux系统中的load average(图文版) -
rfjian123:
非常感谢,用你的方法解决了问题。
Server sent unexpected return value (403 Forbidden) in response to OPTIONS -
yuhaifei12:
今天遇到同样的问题了。设置的是每分钟执行一次。结果发现每分钟执 ...
解决Linux下crontab同一时间重复执行问题 -
BigBird2012:
想问一下,使用ExecutorService每次都要调用 sh ...
spring quartz使用多线程并发“陷阱” -
zhuqx1130:
有用,谢谢
解决Sublime Text 3中文显示乱码(tab中文方块)问题
TreeSet基于TreeMap,它很有意思,当你执行add()方法的时候,集合会自动排序,不需要手工执行Collections.sort()进行排序,代码更加简洁(Clean),今天使用过程发现它暗藏机关,与大家分享。
使用TreeSet有两种方法:
一、元素实现Comparable接口,然后直接通过add方法添加元素即可。
二、创建一个Comparator,并在构造TreeSet的时候传入,如下:
//我这里Job为待添加元素
Set<Job> jobs = new TreeSet<Job>(new JobComparator());
Set<Job> jobs = new TreeSet<Job>(new JobComparator());
我要实现的需求很简单,根据Job的优先级字段(Priority)进行排序,Job类代码如下:
public class Job implements Comparable<SortJob> { private String jobName; private Integer priority; public SortJob() { } public SortJob(String jobName, Integer priority) { this.jobName = jobName; this.priority = priority; } public String getJobName() { return jobName; } public void setJobName(String jobName) { this.jobName = jobName; } public Integer getPriority() { return priority; } public void setPriority(Integer priority) { this.priority = priority; } @Override public int compareTo(SortJob o) { return priority.compareTo(o.getPriority()); } }
测试代码如下:
@Test public void sortJob() { Set<SortJob> jobs = new TreeSet<SortJob>(); jobs.add(new SortJob("001", 1)); jobs.add(new SortJob("002", 1)); jobs.add(new SortJob("003", 1)); assertEquals(3, jobs.size()); // ① jobs.clear(); jobs.add(new SortJob("001", 1)); jobs.add(new SortJob("002", 3)); jobs.add(new SortJob("003", 2)); List<SortJob> listJobs = new ArrayList<SortJob>(jobs); assertEquals("001", listJobs.get(0).getJobName()); assertEquals("003", listJobs.get(1).getJobName()); assertEquals("002", listJobs.get(2).getJobName()); }
测试并没有通过,在行①,这里实际集合size为1,出了什么问题呢?
soga,原来TreeSet的add方法会先调用Job的compareTo方法判断元素是否重复,因为Priority全部为1,所以TreeSet认为后两个Job是重复的,这样的结果显然不是我们想要的,重新实现compareTo方法如下:
@Override public int compareTo(SortJob o) { int compare1 = priority.compareTo(o.getPriority()); return compare1 == 0 ? this.jobName.compareTo(o.jobName) : compare1; }
再次运行测试,OK了。
总结:
- TreeSet通过集合元素的compareTo方法判断元素是否重复,实现compareTo方法既要考虑排序,又要考虑对象是否重复
- 发现这个陷阱后,发现Collections.sort()还是很不错的选择,只需要考虑排序就可以了。
--heipark
发表评论
-
shell下使用log4j 1.x “No appenders could be found for logger”问题两个处理办法
2018-05-25 23:25 1570错误: log4j:WARN No appenders c ... -
通过java class文件确定其编译器版本
2016-06-23 10:45 1029方法一: hexdump -C XXX.class ... -
字符编码笔记:ASCII,Unicode和UTF-8(转)
2014-11-06 17:29 1196今天中午,我突然想搞 ... -
Server sent unexpected return value (403 Forbidden) in response to OPTIONS
2014-10-10 15:01 5497之前用的好好的,忽然某天再次svn up时候就报下面的错误: ... -
netbeans下优秀sublinme主题
2014-09-29 10:13 3578推荐站点:http://netbeansthemes.com ... -
将netbeans项目放到jenkins上做持续集成
2014-07-25 15:20 1193netbeans项目本质是通过ANT来管理的,只不 ... -
关于jvm中Xmx参数默认值
2014-05-08 09:19 1960我的机器win7 64bit 8GB内存,通过jconso ... -
Eclipse代码自动完成功能无法使用问题记录
2014-04-28 10:15 1092使用Alt+/无法补齐Java代码,现象时没有反应。解决方 ... -
thrift0.9.1简单教程(包含Java服务端和Java、python客户端)
2014-04-25 15:55 6351一、Thrift Java服务端和客户端 官 ... -
使用sublime text3开发scala
2014-04-04 16:49 3709打开菜单栏Tool->build system-> ... -
netbeans下打开本地文件夹插件(explorer)
2014-04-02 14:44 19841. 在线安装 工具->插件->可用插 ... -
关闭Sublime自动更新
2014-03-09 21:42 761每次启动都提示更新,可以关闭它。 找到Prefere ... -
使用log4j.properties配置slf4j输出LOG
2014-01-09 08:57 6593完成配置需要以下文件: slf4j-log4j12-x ... -
正确使用java -cp通配符
2013-11-21 17:05 10104JDK6支持java -cp后面跟通配符'*',试了一下发 ... -
强制Java使用东八时区方法
2013-11-15 15:37 1796今天线上有台服务器时区错误,导致很多使用new Da ... -
谨慎使用java的PrintWriter类
2013-10-23 12:31 1324public void test() throws Fil ... -
记录Java ShutdownHook
2013-08-30 11:40 1040public class TestMe { stat ... -
eclipse + maven + jetty + spring web 开发环境简要笔记
2013-08-27 11:25 1566环境准备 确保安装maven3 确保安装eclip ... -
Eclipse(IDE for Java Developers)、maven、jetty、spring web集成
2013-08-27 08:53 0方法一: http://wiki.eclipse.o ... -
关于数据压缩
2013-08-23 14:26 1096常用压缩 quicklz zlib snappy/ ...
相关推荐
用JAVA集合TreeSet写的求并集算法
Java SE程序 TreeSet类中自定义CompareTo类Java SE程序 TreeSet类中自定义CompareTo类Java SE程序 TreeSet类中自定义CompareTo类Java SE程序 TreeSet类中自定义CompareTo类Java SE程序 TreeSet类中自定义CompareTo类...
图书馆管理 1.描述一个图书馆 2.进书,借书卡办理 3.借书,还书 4.查询某书的借出记录 5.查询借书卡的借出记录 6.显示图书列表(按借出次数排序)
主要介绍了Java TreeSet类的简单理解和使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Java数据结构--13.Java8数据结构TreeSet 前⾔ ,上⼀篇中对 Set 接⼝最终实现类 HashSet 与 LinkedHashSet 做了介绍与分析,本篇将对另⼀种 Set 接⼝的最终实现类 TreeSet 进⾏ 介绍与分析。 先来看下 TreeSet 完整...
* 摊位销售管理 1.有一个水果销售摊位,销售3种水果,重量和单价各不相同,实现多次的销售业务 2.销售时如果为顾客为女性销售金额打8折 3.显示当前各种水果的库存数 4.查询全部销售记录信息 5.加入其它水果品种 ...
停车场管理 1.一个停车场,内有多个车位,可停入各种车辆 2.只有具备车牌并高度低于3米的车辆可停入 3.停入时开始计费,按每小时2元 4.查询全部停车位的状态 5.按车牌及停车位号取车,取车时收停车费 ...
TreeSet 是 Java 中的一个集合类,它实现了 SortedSet 接口,并且使用红黑树作为底层数据结构。TreeSet 具有以下主要特点: 排序性:TreeSet 中的元素是有序的,默认按照元素的自然顺序进行排序。或者,可以在创建 ...
毕向东Java基础视频教程-集合框架(TreeSet练习).
使用TreeSet和Comparator,编写TreeSetTest2类,要求对TreeSet中的元素1-元素10进行排列,排序逻辑为奇数在前偶数在后,奇数按照升序排列,偶数按照降序排列。 如果需要的话可以下载,有写成文章的。有写了一点中文...
主要介绍了Java TreeSet实现学生按年龄大小和姓名排序的方法,涉及java类型转换、遍历、比较等相关操作技巧,需要的朋友可以参考下
Class003_TreeSet.java
主要为大家详细介绍了java中treemap和treeset实现红黑树,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
·基于JDK 11,将Java8、Java9、Java10、Java11新特性一网打尽 ·课程中,Eclipse和IDEA这两种企业一线开发环境都使用到了 3.技术讲解更深入、更全面: ·课程共30天,715个知识视频小节,涉及主流Java使用的...
Java是全球排名第一的编程语言,Java工程师也是市场需求最大的软件工程师。 从互联网到企业平台,Java是应用最广泛的编程语言. Java是基于JVM虚拟机的跨平台语言,一次编写,到处运行; Java程序易于编写,而且有...
介绍TreeSet集合用法,向TreeSet集合中添加类的对象,此类需实现Comparable接口,有实例,供需要的朋友下载学习。
下面小编就为大家带来一篇浅谈TreeSet中的两种排序方式。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
JAVA集合框架之List、Map、Set之间的选择~小案例分析:http://blog.csdn.net/qq_23473123/article/details/51240739
HashSet和TreeSet_围墙之外.rar
计算机后端-Java-Java核心基础-第24章 集合01 25. TreeSet的自然排序.avi