黑马程序员技术交流社区
标题:
关于compareTo的问题
[打印本页]
作者:
Alexander
时间:
2014-3-18 19:36
标题:
关于compareTo的问题
问题是这样的:
把以下IP存入一个txt文件,编写程序把这些IP按数值大小,从小到达排序并打印出来。
61.54.231.245
61.54.231.9
61.54.231.246
61.54.231.48
61.53.231.249
打印出来的结果为:
61.53.231.249
61.54.231.9
61.54.231.48
61.54.231.245
61.54.231.246
我比较IP大小的函数是自己写的
public static int compare(String s1, String s2) {
//s1和s2是两个对比的IP值
//将s1和s2中的字符串按点号"."分离,并赋给sp1,sp2
String[] sp1 = s1.split("\\.");
String[] sp2 = s2.split("\\.");
int in1 = 0, in2 = 0;
for(int i=0; i<sp1.length; i++) {
//将sp1和sp2中的字符串变成int类型,方便比较
in1 = Integer.parseInt(sp1[i]);
in2 = Integer.parseInt(sp2[i]);
if(in1 > in2) {
//如果sp1大于sp2则返回1
return 1;
} else if(in1 < in2) {
//小于则返回-1
return -1;
}
}
//否则返回0,表示相等
return 0;
}
本来是想实现Comparable接口,重写compareTo()方法,来给IP判断大小的
但是对着个用的不熟,不知道怎么实现,不知道哪位高手能写出来
作者:
方青木
时间:
2014-3-18 21:14
public int compare(String s1, String s2) {
//s1和s2是两个对比的IP值
//将s1和s2中的字符串按点号"."分离,并赋给sp1,sp2
String[] sp1 = s1.split("\\.");
String[] sp2 = s2.split("\\.");
for(int i=0; i<sp1.length; i++) {
//将sp1和sp2中的字符串变成int类型,方便比较
int x = Integer.parseInt(sp1[i]) - Integer.parseInt(sp2[i]);
if(x!=0) {
return x;
}
}
//否则返回0,表示相等
return 0;
}
作者:
chen_x
时间:
2014-3-18 23:19
实现集合元素自身比较性,compareTo()算法与前面的相同,格式改一下就可以了~
import java.util.Iterator;
import java.util.TreeSet;
public class IpTest {
public static void main(String[] args) {
TreeSet ts=new TreeSet();
ts.add(new IpAdress("61.54.231.245"));
ts.add(new IpAdress("61.54.231.9"));
ts.add(new IpAdress("61.54.231.246"));
ts.add(new IpAdress("61.54.231.48"));
ts.add(new IpAdress("61.53.231.249"));
Iterator it=ts.iterator();
while(it.hasNext()){
IpAdress ip=(IpAdress)it.next();
ip.Show();
}
}
}
class IpAdress implements Comparable{
private String adress;
public IpAdress(String adress){
this.adress=adress;
}
public int compareTo(Object obj) {
if(!(obj instanceof IpAdress)){
throw new RuntimeException("不是IP地址");
}
IpAdress p=(IpAdress)obj;
String[] sp1=this.adress.split("\\.");
String[] sp2=p.adress.split("\\.");
for(int i=0;i<sp1.length;i++){
int x=Integer.parseInt(sp1[i])-Integer.parseInt(sp2[i]);
if(x!=0){
return x;
}
}
return 0;
}
public void Show(){
System.out.println(adress);
}
}
运行结果就是:
61.53.231.249
61.54.231.9
61.54.231.48
61.54.231.245
61.54.231.246
作者:
Alexander
时间:
2014-3-19 09:41
chen_x 发表于 2014-3-18 23:19
实现集合元素自身比较性,compareTo()算法与前面的相同,格式改一下就可以了~
import java.util.Iterator;
...
恩,谢谢,跟我想要的很符合
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2