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

时间:2015-04-23 01:25:11

标签: java

我有一个Shape类,在这个类中有一个名为getRepr()的方法可以获得形状的char表示。例如,

ShapeA.getRepr() ->'a' 
ShapeB.getRepr() ->'b'
ShapeC.getRepr() ->'c'

现在我有一个ArrayList可存储多种形状,包括ShapeEShapeAShapeDShapeCShapeB

问题是如何根据Collections.sort()表示法在ArrayList中使用char 按字母顺序重新排列这些形状?

排序后此ArrayList的预期结果应为ShapeAShapeBShapeCShapeDShapeE

或者有没有办法在没有Collections.sort()的情况下达到这个目的?

3 个答案:

答案 0 :(得分:5)

您需要在SuperClass中实现Comparable接口

public class MyClassSuperClass implements Comparable<MyClassSuperClass>{

    @Override
    public int compareTo(MyClassSuperClass o) {
        return this.getRepr().compareTo(o.getRepr());
    }


}

然后你可以在你的集合上调用.sort方法

  1. 如果obj a> b,则compareTo将返回值&gt; 0
  2. 如果obj a
  3. 如果obj a == b,compareTo将返回0
  4.   

    对于数学倾向,定义自然的关系   对给定类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
    
         

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

    有关详细信息,请查看此链接:

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

答案 1 :(得分:0)

这已在这里得到解答: Alphabetically Sort a Java Collection based upon the 'toString' value of its member items

Collections.sort(list,
             new Comparator<String>()
             {
                 public int compare(String s1, String s2)
                 {
                     return s1.compareTo(s2);
                 }        
             });

答案 2 :(得分:0)

您可以使用Comparable / Comparator来实现此目的,请查看此链接以获取详细信息Object Ordering