黑马程序员技术交流社区
标题:
基础:集合中数据顺序问题
[打印本页]
作者:
咕咕猫
时间:
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