有人可以帮我解决java中的以下问题吗?我有一个简单的类定义如下:
public class Expr {
public long total_apparitions;
public String expression=new String();
public Expr(long total,String expr){
this.total_apparitions=total;
this.expression=expr;
}
public void increment(long aparitions){
total_apparitions+=aparitions;
}
}
我想使用Expr
内置函数按total_apparitions
字段对Arrays.sort
个对象进行排序。如何为Arrays.sort
函数指定比较因子?非常感谢。
答案 0 :(得分:5)
正如@Jason Braucht所说,像这样实施Comparable
:
public class Expr implements Comparable {
...
public int compareTo(Object o) {
if(this.total_apparitions > ((Expr) o).total_apparitions)
return 1;
else if(this.total_apparitions < ((Expr) o).total_apparitions)
return -1;
return 0;
}
}
答案 1 :(得分:4)
让Expr
实施java.lang.Comparable
编辑 - 应该提供一个示例(其他人已经提供过)。这是使用泛型的完整示例。
public class Expr implements Comparable<Expr>
{
public long total_apparitions;
public String expression = new String();
public Expr(long total, String expr)
{
this.total_apparitions = total;
this.expression = expr;
}
public void increment(long aparitions)
{
total_apparitions += aparitions;
}
public int compareTo(Expr o)
{
if (total_apparitions > o.total_apparitions)
{
return 1;
}
else if (total_apparitions < o.total_apparitions)
{
return -1;
}
else
{
return 0;
}
}
}
答案 2 :(得分:3)
作为实施Comparable
的替代方法,您可以将Comparator
实例传递给Arrays.sort()
方法。这样做的好处是,它允许你有不同的概念来排序这种类型的对象数组(比如你可能希望稍后按名称排序,在这种情况下你只需要一个不同的比较器实现)
例如:
public class ByApparationsComparator implements Comparator<Expr> {
public int compare(Expr first, Expr second) {
if (first.total_apparitions > second.total_apparitions) {
return 1;
} else if (first.total_apparitions < second.total_apparitions) {
return -1;
} else {
return 0;
}
}
}
然后你可以说:
Arrays.sort(exprArray, new ByApparationsComparator());