黑马程序员技术交流社区
标题:
关于TreeSet 字符串排序问题
[打印本页]
作者:
lurenge
时间:
2015-4-14 10:21
标题:
关于TreeSet 字符串排序问题
import java.util.*;
class TreeSetTest
{
public static void main(String[] args)
{
TreeSet ts = new TreeSet(new strlencomparator());
ts.add("abc");
ts.add("aac");
ts.add("abdc");
ts.add("accad");
ts.add("abca");
Iterator it = ts.iterator();
while (it.hasNext())
{
System.out.println(it.next());
}
}
class strlencomparator implements Comparator
{
public int compare(object o1,object o2)
{
String s1 = (String)o1;
String s2 = (String)o2;
if(s1.length() > s2.length())
return 1;
if(s1.length() < s2.length())
return -1;
return 0;
}
}
}
复制代码
以上代码错误如下:
QQ截图20150414101846.png
(9.67 KB, 下载次数: 13)
下载附件
2015-4-14 10:21 上传
作者:
机智的黄图哥
时间:
2015-4-14 11:00
你可以直接在TreeSet构造里面实现比较器 或者自然循序 为什么要搞个对象
作者:
突然世界晴
时间:
2015-4-14 11:12
本帖最后由 突然世界晴 于 2015-4-14 11:17 编辑
public int compare(object o1,object o2)
对象第一个字母都是大写,java区分大小写的
改成Object o1 和Object o2另外你的strlencomparator类是内部类
所以传入形参的时候不能用new
strlencomparator,要改为new
TreeSetTest().new
strlencomparator()
或者将
strlencomparator类放在
TreeSetTest类外面
作者:
火七君
时间:
2015-4-14 11:23
本帖最后由 火七君 于 2015-4-14 11:30 编辑
首先你不想用String中的自然排序,你想要按照字符串长度进行排序。
这时你要注意
长度相同的则视为同一个元素,所以打印结果会是三个元素。
下面是错误纠正
这个题中有两个错误,
第一个非常明显就是楼上说的,Object这个首字母要大写。因为这是个类,类名首字母大写这是最基础的语法了。
第二个错误是main方法读取调用方法是从上往下自然顺序调用的,你把比较器类写在下面,上面的是读不到的,所以会报异常。
解决方案:1、你把比较器另写一个类,用public 修饰,注意如果比较器类不在同一个包中注意导包。 2、 如楼上所说用 new 外部类名().new 内部类名() 创建对象也可以
3、 第二种解决方法就是把比较器类写到main方法以下就可以了。
如
class TreeSetTest
{
public static void main(String[] args)
{
class strlencomparator implements Comparator
{
public int compare(Object o1, Object o2) {
String s1 = (String)o1;
String s2 = (String)o2;
if(s1.length() > s2.length())
return 1;
else if(s1.length() < s2.length())
return -1;
else return 0;
}
}
TreeSet ts = new TreeSet(new strlencomparator());
ts.add("abc");
ts.add("aac");
ts.add("abdc");
ts.add("accad");
ts.add("abca");
Iterator it = ts.iterator();
while (it.hasNext())
{
System.out.println(it.next());
}
}
}
复制代码
作者:
段黄军
时间:
2015-4-14 11:29
你直接通过遍历器或是增强for循环就可以排序了
作者:
liaohongjie
时间:
2015-4-14 11:33
Object的O要大写
作者:
lurenge
时间:
2015-4-14 17:06
知道了啊 ,谢谢大家 大小写弄错了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2