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