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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 崔宝东 中级黑马   /  2013-4-27 10:58  /  1713 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 崔宝东 于 2013-4-27 18:17 编辑

String str = "90 -7 0 18 2 45 4";
  String[] arr = str.split(" ");
  TreeSet<String> ts = new TreeSet<String>();
  for (int j = 0; j < arr.length; j++) {
   ts.add(arr[j]);
  }
  Iterator<String> it = ts.iterator();
  while(it.hasNext())
  {
   String str1 = it.next();
  }
  System.out.println(ts);//为什么这么写代码不能达到自然排序的要求;字符串本身也是有顺序的为什么在TreeSet里面没有作用呢?
字符串本身也是按照编码表排列的,所以就应该打印出正常的顺序呀。

我知道可以用Integer,我就是想知道为什么不能用String去排序,任何字符串再编码表中都有固定的值,难道"1”和"2”在编码表中"1“还能比"2”大?这样也不符合逻辑呀?

6 个回复

倒序浏览
我先写点东西  一会帮你解答  楼主
回复 使用道具 举报
注意你是存放在字符串数组中的也就是说每个元素都是一个字符串
例如:"18"  "2" 按字符串的自然顺序比较那就是 '1'的ASCII码<'2' 那么"18"<"2"

如果想要按照整数的自然顺序,那么我们利用Integer:
修改下你的代码:

  1. import java.util.*;
  2. class IntSort{
  3. public static void main(String[] args){
  4.         String str = "90 -7 0 18 2 45 4";
  5.           String[] arr = str.split(" ");
  6.           TreeSet<Integer> ts = new TreeSet<Integer>();
  7.           for (int j = 0; j < arr.length; j++) {
  8.            ts.add(Integer.parseInt(arr[j]));//转换成整数->装箱存入
  9.           }
  10.           Iterator<Integer> it = ts.iterator();
  11.           while(it.hasNext())
  12.           {
  13.            Integer str1 = it.next();
  14.           }
  15.           System.out.println(ts);
  16.         }
  17. }
复制代码
回复 使用道具 举报
其实也排序了,只不过排序方法不一样,String类型的比较的是字符串的哈希值,要按照数字大小排序,还是要用Integer
回复 使用道具 举报
我试了一下。这个已经排序了。排序的规则是,按照数值的首个数值的大小排列的。上面的18首数字是1.所以他排序在2的前面。

点评

懂了  发表于 2013-4-27 18:17
回复 使用道具 举报
"18"与"2"以字符串的形式怎么比?
18
2
'1'<'2',那么下面不再比了,"2">"18" 类比: "ac" "b"

点评

懂了  发表于 2013-4-27 23:50
回复 使用道具 举报
张洪慊 发表于 2013-4-27 18:37
"18"与"2"以字符串的形式怎么比?
18
2

他用不是已经把字符串存到字符数组里面了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马