黑马程序员技术交流社区
标题:
学泛型的第一个例子问题??
[打印本页]
作者:
雨来
时间:
2015-11-2 22:53
标题:
学泛型的第一个例子问题??
import java.util.*;
class ArrayT
{
public static void main(String[] args)
{
//System.out.println("Hello World!");
TreeSet<String>ts=new TreeSet<String>(new LenComparator());//按照LenComparator进行排序
ts.add("abc144");
ts.add("ab3c2");
ts.add("Ab3c2");
ts.add("abceee3");
ts.add("abc3333eee4");
Iterator<String> it=ts.iterator();//获得一个迭代器
while (it.hasNext())
{
String s=it.next();
sop(s);
}
}
public static void sop(Object obj)//封装打印
{
System.out.println(obj);
}
}
class LenComparator implements Comparator<String>//复写Comparator接口的compare方法
{
public int compare(String c1, String c2)
{
// String s1=(String)c1;
//String s2=(String )c2;
int num=new Integer(c2.length()).compareTo(new Integer(c1.length()));//compareTo比较字符串的长度
if(num==0)//如果长度相等 则两个字字符串的ASCII 码Unicode 值
return c2.compareTo(c1);
return num;//否则按照元素的长度排序
}
}
复制代码
为什么这里的c1和c2的位置一换 输出的结果 长度最长的在上面
int num=new Integer(c2.length()).compareTo(new Integer(c1.length()));//compareTo比较字符串的长度
字符串长度排序
if(num==0)//如果长度相等 则两个字字符串的ASCII 码Unicode 值
return c2.compareTo(c1); //
元素Unicode值排序
return num;//否则按照元素的长度排序
作者:
雨来
时间:
2015-11-2 23:12
查了API 里是这样说的
比较用来排序的两个参数。根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。
在前面的描述中,符号 sgn(expression) 表示 signum 数学函数,根据 expression 的值为负数、0 还是正数,该函数分别返回 -1、0 或 1。
实现程序必须确保对于所有的 x 和 y 而言,都存在 sgn(compare(x, y)) == -sgn(compare(y, x))。(这意味着当且仅当 compare(y, x) 抛出异常时 compare(x, y) 才必须抛出异常。)
作者:
雨来
时间:
2015-11-2 23:18
如果 int num=new Integer(c2.length()).compareTo(new Integer(c1.length()));//compareTo
如果num=0、num=1、num=-1; 如果 比较的结果是1说明 c2 也就是集合里的就一个元素是大于 第2个元素 c1再和其它的元素比较 确定就从长度最长的向下排列 如果我们换了位置说明是 从长度最短的开始排列 也就是 长度短的在关面吗?我还 是有点晕
作者:
雨来
时间:
2015-11-2 23:47
为什么已经比较了第一次的值 num是0呢
QQ截图20151102234540.png
(165.23 KB, 下载次数: 2)
下载附件
2015-11-2 23:46 上传
调试的结果
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2