A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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);
        }

}


9 个回复

正序浏览
TreeSet集合去重依赖比较器,如果返回值为0就不存,返回值为负数就存基准数的左边,正数存基准数右边.
回复 使用道具 举报
这是第几天学习的呢?
回复 使用道具 举报
我的理解错了,应该跟二叉树存储方式有关系。
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
谢谢楼主分享
回复 使用道具 举报
13902480061 发表于 2016-10-15 20:39
比较器重写方法问题。adcacd当添加d时候判定ad不等存储顺序ad后面以此类推,添加c判定不等,添加a与前一位 ...

TreeSet存储一个元素不应该和集合里的所有元素比较么?
回复 使用道具 举报
比较器重写方法问题。adcacd当添加d时候判定ad不等存储顺序ad后面以此类推,添加c判定不等,添加a与前一位比较不等,即且大于前面的值,所以不会再与之前的数字比较了。后面以此类推。

来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
return num==0?1:num就好了
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
836563696 发表于 2016-10-15 16:24
搞不清楚为什么去重有的去掉了,有的没去掉?

比较器重写方法不对
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
搞不清楚为什么去重有的去掉了,有的没去掉?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马