我有一个Shape类,在这个类中有一个叫做的方法getRepr()可以得到char一个形状的表示.例如,
ShapeA.getRepr() ->'a'
ShapeB.getRepr() ->'b'
ShapeC.getRepr() ->'c'
Run Code Online (Sandbox Code Playgroud)
现在我有一个ArrayList存储几个形状,包括ShapeE,ShapeA,ShapeD,ShapeC,和ShapeB.
现在的问题是我如何使用Collections.sort(),以字母顺序重新排列这些形状在ArrayList根据自己的char陈述?
预期的结果在这个ArrayList排序后应ShapeA,ShapeB,ShapeC,ShapeD,ShapeE.
或者有没有办法达到这个目的没有Collections.sort()?
您需要在SuperClass中实现Comparable接口
public class MyClassSuperClass implements Comparable<MyClassSuperClass>{
@Override
public int compareTo(MyClassSuperClass o) {
return this.getRepr().compareTo(o.getRepr());
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以在你的集合上调用.sort方法
对于数学倾向,定义给定类C的自然排序的关系是:
Run Code Online (Sandbox Code Playgroud){(x, y) such that x.compareTo(y) <= 0}. The quotient for this total order is: {(x, y) such that x.compareTo(y) == 0}. It follows immediately from the contract for compareTo that the quotient is anC上的等价关系,自然排序是C上的总顺序.当我们说一个类的自然顺序与equals一致时,我们的意思是自然顺序的商是由类的等于(Object)定义的等价关系. )方法:{(x,y)使得x.equals(y)}.
有关更多信息,请查看此链接:
https://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html