按字母顺序排序列表中的元素

use*_*157 1 java

我有一个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()

Vic*_*loy 5

您需要在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方法

  1. 如果obj a> b,compareTo将返回一个> 0的值
  2. 如果obj a
  3. 如果obj a == b,compareTo将返回0

对于数学倾向,定义给定类C的自然排序的关系是:

   {(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 an
Run Code Online (Sandbox Code Playgroud)

C上的等价关系,自然排序是C上的总顺序.当我们说一个类的自然顺序与equals一致时,我们的意思是自然顺序的商是由类的等于(Object)定义的等价关系. )方法:{(x,y)使得x.equals(y)}.

有关更多信息,请查看此链接:

https://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html