首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

TreeSet集合排序有关问题

2014-01-21 
TreeSet集合排序问题需求是数组去重,但是要保留原来的顺序,例如:原始数组是{4,2,4,6,1,2,4,7,8}得到结果{4

TreeSet集合排序问题
需求是数组去重,但是要保留原来的顺序,例如:

原始数组是{4,2,4,6,1,2,4,7,8}
  得到结果{4,2,6,1,7,8}
我想用TreeSet集合,然后自定义一个比较器,可是结果却是错误的,代码如下:

旋转后颜色忘记了,不知道有没有弄错,如果不懂红黑树的话得自己去学习一下了
[解决办法]
为了这个问题专门去查了一个小时!
TreeSet是用TreeMap实现的,而TreeMap又是用红黑树实现的,红黑树又是一个加了条件的排序树。在你的代码中,comparator只会返回1(或-1),这就是说在插入数据的时候,只会沿着右子树(或左子树)的方向检索,并且在插入的过程中,树自身不断的调整,从而导致新添加的元素A根本没有没有机会去跟与A相等的B进行比较,从而导致了无法去重,如果楼主想彻底搞明白这个问题,请自己去模拟下红黑树的插入过程。

[解决办法]
ItEye上我也曾参与讨论过一个类似的问题

treeSet 一个很诡异的重复性判断问题

虽然不大一样,你也可以参考下。

热点排行