黑马程序员技术交流社区

标题: 关于TreeSet集合去重不排序的问题 [打印本页]

作者: 836563696    时间: 2016-10-15 16:16
标题: 关于TreeSet集合去重不排序的问题
本帖最后由 836563696 于 2016-10-15 16:22 编辑

题目:给一个字符串去重,并且不改变原字符串的顺序,用TreeSet集合做.
例如:String  s ="abcacd";  结果:[a, b, c, a, d]
我的代码打印出来有的去掉了重复,有的没去掉,代码如下:
[Java] 纯文本查看 复制代码
package practice;

import java.util.Comparator;
import java.util.TreeSet;

public class Test6 {

        /**
         *需求:给一个字符串去重,并且不改变元字符串的顺序。
        (用TreeSet集合做)
        例如:String  s ="abcacd";  [a, b, c, a, d]
         */
        public static void main(String[] args) {
                String  s ="bcadbcad";
                TreeSet<Character> ts = new TreeSet<>(new Comparator<Character>() {

                        @Override
                        public int compare(Character c1, Character c2) {
                                //int num = c1.compareTo(c2);
                                return c1 == c2 ? 0 : 1;
                        }
                });
                char[] arr = s.toCharArray();
                for (char c : arr) {
                        ts.add(c);
                }
                System.out.println(ts);
        }

}



作者: 836563696    时间: 2016-10-15 16:24
搞不清楚为什么去重有的去掉了,有的没去掉?
作者: 寒冰夜    时间: 2016-10-15 18:11
836563696 发表于 2016-10-15 16:24
搞不清楚为什么去重有的去掉了,有的没去掉?

比较器重写方法不对

作者: 奕明传媒    时间: 2016-10-15 18:16
return num==0?1:num就好了

作者: 13902480061    时间: 2016-10-15 20:39
比较器重写方法问题。adcacd当添加d时候判定ad不等存储顺序ad后面以此类推,添加c判定不等,添加a与前一位比较不等,即且大于前面的值,所以不会再与之前的数字比较了。后面以此类推。


作者: 836563696    时间: 2016-10-16 15:57
13902480061 发表于 2016-10-15 20:39
比较器重写方法问题。adcacd当添加d时候判定ad不等存储顺序ad后面以此类推,添加c判定不等,添加a与前一位 ...

TreeSet存储一个元素不应该和集合里的所有元素比较么?
作者: bahamut322    时间: 2016-10-16 17:56
谢谢楼主分享
作者: 13902480061    时间: 2016-10-16 18:51
我的理解错了,应该跟二叉树存储方式有关系。

作者: liudihua    时间: 2016-10-17 00:18
这是第几天学习的呢?
作者: Dreamkele    时间: 2016-10-17 08:25
TreeSet集合去重依赖比较器,如果返回值为0就不存,返回值为负数就存基准数的左边,正数存基准数右边.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2