Java 按字母顺序对列表中的元素进行排序

Java 按字母顺序对列表中的元素进行排序,java,Java,我有一个Shape类,在这个类中有一个名为getRepr()的方法,它可以获取形状的char表示。比如说, ShapeA.getRepr() ->'a' ShapeB.getRepr() ->'b' ShapeC.getRepr() ->'c' 现在我有了一个ArrayList,它存储了几个形状,包括ShapeE、ShapeA、ShapeC、和ShapeB 问题是如何使用Collections.sort()以字母顺序在ArrayList中根据它们的char表示重新排列这些形

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

ShapeA.getRepr() ->'a' 
ShapeB.getRepr() ->'b'
ShapeC.getRepr() ->'c'
现在我有了一个
ArrayList
,它存储了几个形状,包括
ShapeE
ShapeA
ShapeC
、和
ShapeB

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

排序后,此
数组列表中的预期结果应为
ShapeA
ShapeB
ShapeC
ShapeE
ShapeE


或者有没有一种方法可以在不使用Collections.sort()的情况下达到此目的?

您需要在超类中实现类似的接口

public class MyClassSuperClass implements Comparable<MyClassSuperClass>{

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


}
公共类MyClassSuperClass实现了可比较的{
@凌驾
公共int比较(MyClassSuperClass o){
返回这个.getRepr().compareTo(o.getRepr());
}
}
然后就可以对集合调用.sort方法

  • 如果obj a>b,则比较器返回的值应大于0
  • 如果obj a
  • 如果obj a==b,则比较器TO应返回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
    

    {(x,y)这样x.compareTo(y)您需要在超类中实现可比较的接口

    public class MyClassSuperClass implements Comparable<MyClassSuperClass>{
    
        @Override
        public int compareTo(MyClassSuperClass o) {
            return this.getRepr().compareTo(o.getRepr());
        }
    
    
    }
    
    公共类MyClassSuperClass实现了可比较的{
    @凌驾
    公共int比较(MyClassSuperClass o){
    返回这个.getRepr().compareTo(o.getRepr());
    }
    }
    
    然后就可以对集合调用.sort方法

  • 如果obj a>b,则比较器返回的值应大于0
  • 如果obj a
  • 如果obj a==b,则比较器TO应返回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
    

    {(x,y)这样x.compareTo(y)这里已经回答了这个问题:
    

    Collections.sort(列表、,
    新比较器()
    {
    公共整数比较(字符串s1、字符串s2)
    {
    返回s1.compareTo(s2);
    }        
    });
    
    这里已经回答了这个问题:

    Collections.sort(列表、,
    新比较器()
    {
    公共整数比较(字符串s1、字符串s2)
    {
    返回s1.compareTo(s2);
    }        
    });
    
    您可以使用Comparable/Comparator来实现这一点,检查此链接以获取详细信息

    您可以使用Comparable/Comparator来实现这一点,检查此链接以获取详细信息

    ShapeA
    ShapeE
    类的子类
    Shape
    ?@jadhachem他们都是ShapeA
    ShapeA
    Shape>E
    Shape
    ?@jadhachem的子类它们都是Shape类型请注意,这只是按自然顺序比较两个字符串(而不是两个形状),实际上您不需要自定义比较器(您只需执行
    Collections.sort(list)
    即可获得相同的结果)@yshavit就在这里。您不需要自定义的
    比较器
    ,因为您当前的类型
    字符串
    已经实现了
    可比
    接口,所以它会注意将自身与另一个字符串实例进行比较。好的。谢谢。我不知道。请注意,这只是比较了两个字符串(而不是两个形状)根据它们的自然顺序,实际上不需要自定义比较器(您只需执行
    Collections.sort(list)
    即可获得相同的结果)@yshavit就在这里。您不需要自定义的
    比较器
    ,因为您当前的类型
    字符串
    已经实现了
    可比
    接口,所以它会注意将自身与另一个字符串实例进行比较。好的。谢谢。我不知道。