黑马程序员技术交流社区

标题: 基础:集合中数据顺序问题 [打印本页]

作者: 咕咕猫    时间: 2013-9-14 10:13
标题: 基础:集合中数据顺序问题
本帖最后由 咕咕猫 于 2013-9-14 15:34 编辑

练习:按照字符串长度排序
import java.util.*;
class TreeSetTest
{
        public static void main(String[]args)
        {
                TreeSet ts = new TreeSet(new MyCompare());//建立TreeSet集合
                ts.add("abcd");
                ts.add("cc");
                ts.add("cb");
                ts.add("cba");
                ts.add("z");
                ts.add("haha");
                Iterator it = ts.iterator();
                while (it.hasNext())
                {
                        System.out.println(it.next());
                }
        }
}
class MyCompare implements Comparator//建立比较器
{
        public int compare(Object o1,Object o2)
        {
                String s1 = (String)o1;//强转类型为字符串型
                String s2 = (String)o2;
                int num = s1.length().compareTo(s2.length());//比较字符串长度
                if(num==0)//当字符串长度相同时比较字符串自然顺序
                {
                        return s1.compareTo(s2);
                }
                return num;
        }
}
{:soso_e132:}感觉写的应该没什么问题吧怎么运行不出来呢,求指教啊


作者: 雪龙    时间: 2013-9-14 10:33
你是用的记事本工具吧
第一个问题:你在写的时候注意单词
while (it.hasNest())//你的单词写错了  是hasNext
                {
                        System.out.println(it.next());
                }
第二个问题  你在比较字符串长度的时候  
int num = s1.length().compareTo(s2.length());//比较字符串长度    //这个比较是有点问题的
                if(num==0)//当字符串长度相同时比较字符串自然顺序
                {
                        return s1.compareTo(s2);
                }
                return num;
        }
既然只比较长度  可以这样写啊
int num = s1.length();
  int num1 = s2.length();// 比较字符串长度
  if (num == num1)// 当字符串长度相同时比较字符串自然顺序
  {
   return s1.compareTo(s2);
  }
  return num;
}



作者: .....淡定    时间: 2013-9-14 10:37
package com.itheima;

import java.util.*;

class TreeSetTest {
        public static void main(String[] args) {
                TreeSet ts = new TreeSet(new MyCompare());// 建立TreeSet集合
                ts.add("abcd");
                ts.add("cc");
                ts.add("cb");
                ts.add("cba");
                ts.add("z");
                ts.add("haha");
                Iterator it = ts.iterator();
                while (it.hasNext()) {
                        System.out.println(it.next());
                }
        }
}

class MyCompare implements Comparator// 建立比较器
{
        public int compare(Object o1, Object o2) {
                String s1 = (String) o1;// 强转类型为字符串型
                String s2 = (String) o2;
                int num = s1.length()-s2.length();// 比较字符串长度
                if (num == 0)// 当字符串长度相同时比较字符串自然顺序
                {
                        return s1.compareTo(s2);
                }
                return num;
        }
}
int不能用比较器,直接减就可以了
作者: 咕咕猫    时间: 2013-9-14 12:46
本帖最后由 咕咕猫 于 2013-9-14 12:52 编辑
雪龙 发表于 2013-9-14 10:33
你是用的记事本工具吧
第一个问题:你在写的时候注意单词
while (it.hasNest())//你的单词写错了  是hasNe ...

呃呃,单词打错了。这一步是为了比较字符串谁长谁短的,然后会返回一个值,有一种特殊的情况就是当两个字符串长度相等时,这样会默认这两个字符串是一样的只会存其中的一个,为了解决这个问题所以在下面又写了if语句来判断当字符串长度一样时,字符串的内容是否一样。你这样写的话应该不行吧
作者: 赵凯    时间: 2013-9-14 12:55
package enumTest;


//练习:按照字符串长度排序
import java.util.*;
class TreeSetTest
{
        public static void main(String[]args)
        {
                TreeSet ts = new TreeSet(new MyCompare());//建立TreeSet集合
                ts.add("abcd");
                ts.add("cc");
                ts.add("cb");
                ts.add("cba");
                ts.add("z");
                ts.add("haha");
                Iterator it = ts.iterator();
                while (it.hasNext())  //(1)
                {
                        System.out.println(it.next());
                }
        }
}
class MyCompare implements Comparator//建立比较器
{
        public int compare(Object o1,Object o2)
        {
                String s1 = (String)o1;//强转类型为字符串型
                String s2 = (String)o2;
                int num = s1.length()-s2.length();//比较字符串长度  //(2)
                if(num==0)//当字符串长度相同时比较字符串自然顺序
                {
                        return s1.compareTo(s2);
                }
                return num;
        }
}
//(1)it.hasNest() -->it.hasNext()这不是用eclipse写的吧,要不然不会出这么简单的问题
//(2)比较字符串长度的时候不能用compare比较,直接用==就行,你这个可以改成相减




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2