想弄一个关于类的排序,怎么这么难啊

[复制链接]
查看11 | 回复9 | 2007-9-26 17:05:46 | 显示全部楼层 |阅读模式
想对类进行排序,按照类的前几个字段进行排序,写了几个类,不知道有什么不对的地方,各位看官给看看。
类1
public class CompaerClass implements Comparable {

private int a;

private String b;

private String c;

private String d;

private String e;

public int getA() {

return a;

}

public void setA(int a) {

this.a = a;

}

public String getB() {

return b;

}

public void setB(String b) {

this.b = b;

}

public String getC() {

return c;

}

public void setC(String c) {

this.c = c;

}

public String getD() {

return d;

}

public void setD(String d) {

this.d = d;

}

public String getE() {

return e;

}

public void setE(String e) {

this.e = e;

}

public int compareTo(Object tt) {

CompaerClass t = (CompaerClass) tt;

Integer aa = Integer.valueOf(t.getA());

String bb = t.getB();

String cc = t.getC();

String dd = t.getD();

if (aa.compareTo(this.a) > 0) {

return aa.compareTo(Integer.valueOf(this.a));

} else if (bb.compareTo(this.b) > 0) {

return bb.compareTo(this.b);

} else if (cc.compareTo(this.c) > 0) {

return cc.compareTo(this.c);

} else

return dd.compareTo(this.d);

}

public int hashCode() {

final int prime = 31;

int result = 1;

result = prime * result + a;

result = prime * result + ((b == null) ? 0 : b.hashCode());

result = prime * result + ((c == null) ? 0 : c.hashCode());

result = prime * result + ((d == null) ? 0 : d.hashCode());

result = prime * result + ((e == null) ? 0 : e.hashCode());

return result;

}

public boolean equals(Object obj) {

if (this == obj)

return true;

if (obj == null)

return false;

if (!(obj instanceof CompaerClass))

return false;

final CompaerClass other = (CompaerClass) obj;

if (a != other.a)

return false;

if (b == null) {

if (other.b != null)

return false;

} else if (!b.equals(other.b))

return false;

if (c == null) {

if (other.c != null)

return false;

} else if (!c.equals(other.c))

return false;

if (d == null) {

if (other.d != null)

return false;

} else if (!d.equals(other.d))

return false;

if (e == null) {

if (other.e != null)

return false;

} else if (!e.equals(other.e))

return false;

return true;

}
}
回复

使用道具 举报

千问 | 2007-9-26 17:05:46 | 显示全部楼层
类2:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
public class CopmpareClassTest {

/**
* @param args
*/

public static void main(String[] args) {

// TODO Auto-generated method stub

List t = new ArrayList();

CompaerClass c = new CompaerClass();

c.setA(1);

c.setB("a");

c.setC("h");

c.setD("o");

c.setE("u");

t.add(c);

c = new CompaerClass();

c.setA(5);

c.setB("d");

c.setC("i");

c.setD("q");

c.setE("x");

t.add(c);

c = new CompaerClass();

c.setA(4);

c.setB("g");

c.setC("l");

c.setD("w");

c.setE("u");

t.add(c);

c = new CompaerClass();

c.setA(9);

c.setB("b");

c.setC("n");

c.setD("u");

c.setE("y");

t.add(c);

c = new CompaerClass();

c.setA(5);

c.setB("d");

c.setC("i");

c.setD("p");

c.setE("x");

t.add(c);

printTest(t);

System.out.println("sort up");

Collections.sort(t);

Collections.reverse(t);

printTest(t);

}

private static void printTest(List q) {

for (Iterator t = q.iterator(); t.hasNext();) {

CompaerClass com = (CompaerClass) t.next();

System.out.println(com.getA() + "|" + com.getB() + "|" + com.getC()

+ "|" + com.getD() + "|" + com.getE());

}

}
}
回复

使用道具 举报

千问 | 2007-9-26 17:05:46 | 显示全部楼层
输出如下:
1|a|h|o|u
5|d|i|q|x
4|g|l|w|u
9|b|n|u|y
5|d|i|p|x
sort up
1|a|h|o|u
5|d|i|p|x
5|d|i|q|x
4|g|l|w|u
9|b|n|u|y
为什么4排到5的后边了??
回复

使用道具 举报

千问 | 2007-9-26 17:05:46 | 显示全部楼层
谁给看看~!不知道那儿写错了!
回复

使用道具 举报

千问 | 2007-9-26 17:05:46 | 显示全部楼层
不会debug?
回复

使用道具 举报

千问 | 2007-9-26 17:05:46 | 显示全部楼层
public int compareTo(Object tt) {

CompaerClass t = (CompaerClass) tt;

Integer aa = Integer.valueOf(t.getA());

String bb = t.getB();

String cc = t.getC();

String dd = t.getD();

if (aa.compareTo(this.a) > 0) {

return aa.compareTo(Integer.valueOf(this.a));

} else if (bb.compareTo(this.b) > 0) {

return bb.compareTo(this.b);

} else if (cc.compareTo(this.c) > 0) {

return cc.compareTo(this.c);

} else

return dd.compareTo(this.d);
}
用跌代?你这里干什么要方法里套一样的方法啊 感觉另外写一个会清晰点
回复

使用道具 举报

千问 | 2007-9-26 17:05:46 | 显示全部楼层
有啥难的,就那么点死规矩,照做就可以了!
回复

使用道具 举报

千问 | 2007-9-26 17:05:46 | 显示全部楼层
原帖由 lanhongbo 于 2009-2-24 19:00 发表
public int compareTo(Object tt) {

CompaerClass t = (CompaerClass) tt;

Integer aa = Integer.valueOf(t.getA());

String bb = t.getB();

String cc = t.getC();

String dd = t.getD();

if (aa.compareTo(this.a) > 0) {

return aa.compareTo(Integer.valueOf(this.a));

} else if (bb.compareTo(this.b) > 0) {

return bb.compareTo(this.b);

} else if (cc.compareTo(this.c) > 0) {

return cc.compareTo(this.c);

} else

return dd.compareTo(this.d);
}
用跌代?你这里干什么要方法里套一样的方法啊 感觉另外写一个会清晰点


不是迭代啊!cc 、bb、dd是String类,这里只是调用类的compareTo方法而已!
回复

使用道具 举报

千问 | 2007-9-26 17:05:46 | 显示全部楼层
原帖由 myfriend2010 于 2009-2-25 11:20 发表

不是迭代啊!cc 、bb、dd是String类,这里只是调用类的compareTo方法而已!

个人感觉不是这么用的
compareTo方法返回一个数就成了 然后调用
arrays 或则Collection 的SORT方法排序
反正compareTo里套compareTo我感觉不对劲 compareTo方法里完成比较就成了 。
回复

使用道具 举报

千问 | 2007-9-26 17:05:46 | 显示全部楼层
到处都是compareTo里套compareTo的例子啊~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行