问题描述
- 关于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);
}
解决方案
这样去重从效率上讲,是低的,因为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));
解决方案二:
set是无序的,试着转化成list输出。或者直接就用list
解决方案三:
你是利用了set的去重特性,应该自己写一个去重算法,这样可以保持数据的顺序不被破坏
解决方案四:
1、Set这个接口规范表示的集合没有重复的元素,但是Set的实现类有多个:HashSet、TreeSet、EnumSet、LinkedHashSet等。
其中HashSet表示的元素是无序的,它不能保证按照元素添加的顺序排序,而是元素的hash值;
TreeSet是有序的,它按照元素的大小排序,也不是添加顺序;
EnumSet只能存放某个枚举类的枚举值;
LinkedHashSet继承自HashSet,也根据hashchode来判断存储元素的位置,其中维护了一张链表,所以集合中元素的顺序与插入的顺序一样。
2、按照上述分析,你应该使用LinkedHashSet。
代码修改:
// 将数组转为LinkedHashSet
Set set = new LinkedHashSet(Arrays.asList(array));
解决方案五:
java中字符串的编码解码问题
java中接收字符串的问题
java字符串常见问题
解决方案六:
你这个方法不行,既然想保持原来的顺序,就不要用treeset了。构造一个list,每次放入的时候检查下是否存在。
解决方案七:
用linkedhashset绝对能做出来,记得是绝对哦
时间: 2024-08-03 17:09:23