黑马程序员技术交流社区

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

作者: 836563696    时间: 2016-10-15 16:14
标题: 关于TreeSet集合去重不排序的问题
题目:给一个字符串去重,并且不改变原字符串的顺序,用[color=Red]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);
        }

}

作者: Angel若梦    时间: 2016-10-15 22:35
一直感觉这种题就是有病,每个集合有每个集合的用法,不去学每个集合应该做什么,什么时候用什么集合,却折腾这种东西,如果开发中这么用,估计会被老板同事打死.
treeset本来就是用二叉树来排序和去重的,非要反着玩.
你这么写理论上是没错的,但是,treeset在存储元素的时候也是有优化的,不会把每一个元素都进行比较,如果不这样,数据量大的话每个元素都比较几千次,还有效率可言吗.但是,估计写优化算法的人也没考虑到有这么奇葩的用法吧.如果不信的话,可以这样看下,你会明白为什么后面还是会存储重复的元素
[Java] 纯文本查看 复制代码
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) {
                    System.out.println("c1="+c1+",c2="+c2);
                return c1 == c2 ? 0 : 1;
            }
        });
        char[] arr = s.toCharArray();
        for (char c : arr) {
                System.out.println("---------"+c);
            ts.add(c);
        }
        System.out.println(ts);
    }

作者: 836563696    时间: 2016-10-16 15:43
有没有人知道原理的?

作者: 哦啊啊    时间: 2016-10-16 18:39
不知道蓝瘦香菇

作者: 332597171    时间: 2016-10-16 21:44
package practise;

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

public class ddd {

    /**
     *需求:给一个字符串去重,并且不改变元字符串的顺序。
    (用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?1:1;
            }
        });
        char[] arr = s.toCharArray();
        int count = 0;
        for (char c : arr) {
                String str = String.valueOf(c);
                if("c".equals(str)){
                  if(count==0){
                          count++;
                          ts.add(c);
                  }
                  continue;
                }
               
            ts.add(c);
        }
        System.out.println(ts);
    }

}


要去掉哪个 就把“c”改成要去掉的就行
作者: wangkai426    时间: 2016-10-16 21:57
看不太懂啊,看来自身还需要加强知识啦
作者: fdzx0707fh    时间: 2016-10-16 23:30
实现Comparator  




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