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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

题目:给一个字符串去重,并且不改变原字符串的顺序,用[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);
	}

}

6 个回复

倒序浏览
一直感觉这种题就是有病,每个集合有每个集合的用法,不去学每个集合应该做什么,什么时候用什么集合,却折腾这种东西,如果开发中这么用,估计会被老板同事打死.
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);
    }
回复 使用道具 举报
有没有人知道原理的?
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
回复 使用道具 举报
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”改成要去掉的就行
回复 使用道具 举报
看不太懂啊,看来自身还需要加强知识啦
回复 使用道具 举报
实现Comparator  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马