【发布时间】:2019-11-05 10:32:32
【问题描述】:
我的目标是对一个类的数组列表进行排序
public class AnimSprite
{
float x,y,z;
//...//
}
ArrayList<AnimSprite> listofsprites = new ArrayList<AnimSprite>();
//...//
list.add( new AnimSprite(1f,10f,0f) ); //x,y,z
list.add( new AnimSprite(15f,25f,1f) );
list.add( new AnimSprite(30f,-62f,0f) );
list.add( new AnimSprite(150f,-62f,2f) );
list.add( new AnimSprite(55f,-65f,0f) );
//...//
那我当然循环画了
for (AnimSprite s: listofsprites) { s.draw();}
在绘制指令之前,我们如何对数组列表进行排序? (按 y 升序然后 z 升序排列)
例如预期结果:
obj0 -> AnimSprite(55f,-65f,0f)
obj1 -> AnimSprite(30f,-62f,0f)
obj2 -> AnimSprite(1f,10f,0f)
obj3 -> AnimSprite(15f,25f,1f)
obj4 -> AnimSprite(150f,-62f,2f)
目前,如下所示,我按 y 和 z 升序排序,但我不确定它是否是最先进的?
public static class AnimSprite implements Comparable<AnimSprite >
{
//...//
Override
public int compareTo(AnimSprite o)
{
float result = this.z - o.z;
if (result == 0f) result = this.y - o.y;
return ((int)(result));
}
【问题讨论】:
-
我建议您使用
Comparator接口自己尝试:docs.oracle.com/javase/7/docs/api/java/util/Comparator.html。如果您仍然有困难,请回复,我们可以解决。 -
这不是主题本身,但我建议尽可能使用接口而不是类,例如: ArrayList
listofsprites = new ArrayList ();应该是 List listofsprites = new ArrayList (); -
谢谢,但最后一点是按 2 个浮点数排序
-
Collection.sort(list) -
请注意按2个浮点属性正确排序