关于java字符串去重的问题

今天碰到个java字符串去重的问题,尝试着用另一种方法TreeSet去做一下,出来的结果确实去重了,但是会按abcd的顺序排列,而不是给定的字符串顺序。问一下怎么纠正?
public void Method_2(String str) {
// 原始输入
System.out.println("原始的字符串:" + str);
long startTime = System.nanoTime();
// 将输入转为字符串数组
String[] array = str.split("");
// 将数组转为TreeSet
Set set = new TreeSet(Arrays.asList(array));
Iterator iterator = set.iterator();
// 遍历TreeSet并输出
System.out.print("去重的字符串:");
while (iterator.hasNext()) {
String result = iterator.next();
System.out.print(result);
}
System.out.println();
// 计算程序运行时间
long endTime = System.nanoTime();
long time = endTime - startTime;
System.out.println("程序执行时间:" + time);
}

6个回答

这样去重从效率上讲,是低的,因为TreeSet是用TreeMap来实现的,而TreeMap采用了红黑树-一种二叉排序树。
当然不考虑效率,一定用TreeSet,可以这么玩:

 Set set = new TreeSet(Arrays.asList(array));

改成

        Set<String> set = new TreeSet<String>(new Comparator<Object>() {
            @Override
            public int compare(Object o1, Object o2) {
                if(o1.equals(o2)){
                    return 0;
                }else{
                    return 1;
                }               
            }
        });
        set.addAll(Arrays.asList(array));

1、Set这个接口规范表示的集合没有重复的元素,但是Set的实现类有多个:HashSet、TreeSet、EnumSet、LinkedHashSet等。

其中HashSet表示的元素是无序的,它不能保证按照元素添加的顺序排序,而是元素的hash值;

TreeSet是有序的,它按照元素的大小排序,也不是添加顺序;

EnumSet只能存放某个枚举类的枚举值;

LinkedHashSet继承自HashSet,也根据hashchode来判断存储元素的位置,其中维护了一张链表,所以集合中元素的顺序与插入的顺序一样。

2、按照上述分析,你应该使用LinkedHashSet。
代码修改:

// 将数组转为LinkedHashSet
Set set = new LinkedHashSet(Arrays.asList(array));

你这个方法不行,既然想保持原来的顺序,就不要用treeset了。构造一个list,每次放入的时候检查下是否存在。

用linkedhashset绝对能做出来,记得是绝对哦

set是无序的,试着转化成list输出。或者直接就用list

你是利用了set的去重特性,应该自己写一个去重算法,这样可以保持数据的顺序不被破坏

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问