如何通过java中的组件对对象的arrayList进行排序

时间:2012-04-24 03:35:42

标签: java

我试图以两种不同的方式对arrayList进行排序,一种是通过arrayList中对象的区域进行排序,另一种是使用arrayList中对象的名称(shape1,shape2)进行排序。当我将它们打印到文件中时,对象看起来像这样:shape1 :( points,radius等等)area = 0.0并且形状继续存在。我尝试查看其他类似的问题,但都使用Collections.sort进行了回答。我不确定我应该使用这种方法。这是我正在使用的一些代码,可以给你一个想法:

for (int i =0; i <shapes.size();i++){
    for (int j = 1; j<shapes.size(); j++){
        if (shapes.get(i).getShape().area() > shapes.get(j).getShape().area())
        {
            //
        }
        else
        {
            //
        }
    }
}

我不知道该怎么做才能做到这一点。有什么指针吗?按名称排序我必须使用:

shapes.get(i).getName()

4 个答案:

答案 0 :(得分:3)

解决方案1 ​​

您可以实现Comparable界面并使用Collections.sort(List list)进行排序。

public class Shape implements Comparable<Shape> {
    @Override
    public int compareTo(Shape o) {
        if(o == null) {
            return 1;
        }
        if(getName() == null || o.getName() == null) {
            return 0;
        } else if(getName() != null && o.getName() == null) {
            return 1;
        } else if(getName() == null && o.getName() != null) {
            return -1;
        }
        return getName().compareTo(o.getName());
    }
}

Collections.sort(shapes);

解决方案2

创建一个实现Comparator并使用Collections.sort(List list, Comparator c)

的类
public class ShapeComparator implements Comparator<Shape> {
    @Override
    public int compare(Shape s1, Shape s2) {
        if(s1 == null || s2 == null) {
            return 0;
        } else {
            return s1.getName().compareTo(s2.getName());
        }
    }
}

Collections.sort(shapes, new ShapeComparator());

答案 1 :(得分:1)

答案 2 :(得分:1)

由于这是作业,我不会发布任何代码。

如果您不允许使用Arrays.sort,则可以实现Selection Sort - 它非常简单,您已经在代码中编写了它的开头。想法是在i上的外循环的每次迭代中使用i上的内循环从shapes.size()j中选择段中的最小元素,然后放置元素i - 数组的位置。你的内循环应该是这样的:

for(int j = i+1 ; j<shapes.size(); j++)
//          ^--- this is what's changed

现在根据您的if条件,您可以将j - 元素与i交换,或者将其保留到位并继续。

要排序字符串,请在if条件中使用compareTo方法。

答案 3 :(得分:0)

我认为你应该使用这样的东西:

        Collections.sort(shapes, new Comparator<Object>() {
            public int compare(Object obj1, Object obj2) {
                Shape shape1 = ((Shape) obj1).getShape();
                Shape shape2 = ((Shape) obj2).getShape();

                String name1 = ((Shape) obj1).getName();
                String name2 = ((Shape) obj1).getName();

                Double area1 = shape1.area();
                Double area2 = shape2.area();

                int areaCmp = area1 - area2;
                if( areaCmp!= 0 ) {
                    return areaCmp;
                }

                return name1.compareTo(name2);
            }
        });

了解更多info