TreeSet 排序问题

枫~ 2016-09-24 10:25:06
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;

public class Main {
public static StringBuilder RandomGenerator(int n){
StringBuilder sbuilder=new StringBuilder();
Random random=new Random();
for(int i=0;i<n;i++){
sbuilder.append((random.nextInt(1000)+1)+" "); //加空格的目的是为了后面的数字拆分
}

return sbuilder;
}
public static Set<String> Eliminate(StringBuilder sbuilder){
String[] string=new String(sbuilder).split(" ");// 以空格为界限,拆分StringBuilder内容,取出里面的数字
TreeSet<String> set=new TreeSet<String>();
for(String s:string){
set.add(s);
}
return set;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
Set<String> set=Eliminate(RandomGenerator(sc.nextInt()));
for(String s:set){
System.out.println(s.toString());
}
}

}
}
我的目的是随机生成n个1-1000以内的整数,n是从键盘输入,然后对这个10个数进行去重,并且排序,最后输出新的十个数。。。。。。。
我用了TreeSet,利用了Set的不重复性以及TreeSet的有序性,可是为什么输出结果为什么部分有序,部分无序。
附上一组测试结果:
输入:20
输出:134
16
265
282
34
373
39
416
421
464
574
587
65
673
713
719
729
752
85
90

红色标记的不是想要的结果
...全文
108 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
枫~ 2016-09-24
  • 打赏
  • 举报
回复
引用 楼主 whh10010 的回复:
import java.util.Arrays; import java.util.Random; import java.util.Scanner; import java.util.Set; import java.util.TreeSet; public class Main { public static StringBuilder RandomGenerator(int n){ StringBuilder sbuilder=new StringBuilder(); Random random=new Random(); for(int i=0;i<n;i++){ sbuilder.append((random.nextInt(1000)+1)+" "); //加空格的目的是为了后面的数字拆分 } return sbuilder; } public static Set<String> Eliminate(StringBuilder sbuilder){ String[] string=new String(sbuilder).split(" ");// 以空格为界限,拆分StringBuilder内容,取出里面的数字 TreeSet<String> set=new TreeSet<String>(); for(String s:string){ set.add(s); } return set; } public static void main(String[] args) { Scanner sc=new Scanner(System.in); while(sc.hasNext()){ Set<String> set=Eliminate(RandomGenerator(sc.nextInt())); for(String s:set){ System.out.println(s.toString()); } } } } 我的目的是随机生成n个1-1000以内的整数,n是从键盘输入,然后对这个10个数进行去重,并且排序,最后输出新的十个数。。。。。。。 我用了TreeSet,利用了Set的不重复性以及TreeSet的有序性,可是为什么输出结果为什么部分有序,部分无序。 附上一组测试结果: 输入:20 输出:134 16 265 282 34 373 39 416 421 464 574 587 65 673 713 719 729 752 85 90 红色标记的不是想要的结果
对哦,恍然大悟,哈哈,多谢多谢,终于找到错误了
anakin_feng 2016-09-24
  • 打赏
  • 举报
回复
你是string类型啊,按第一个个字符的ascil码比较的,你可以用Integer类型
I,Frankenstein 2016-09-24
  • 打赏
  • 举报
回复
如果你想要你的结果,很好办, for(String s:string){ set.add(s); } 这地方,把String改成Long 因为你用的是默认排序,对于String类型的数据,如果第一个字符相同,比较第二个字符,对于第一个字符,"1"<"2"。所以会得到你看到的结果

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧