在不使用接口的情况下对自定义对象的Arraylists进行排序

时间:2012-12-08 23:43:59

标签: java sorting object arraylist

很抱歉,这可能会重复,我不确定我之前尝试发布此内容是否已经过了。

几个星期前开始学习Java,开始我的第一个任务。 :)

我的问题有点基础,但在查看以前解决的主题后,我找不到它的确切等价物。这不是现实生活中的问题,所以我想我会以非常具体的方式解决这个问题。

所以任务包括几个步骤 - 我必须创建一个包含许多自定义对象的超类,添加新的子类,实现新方法来计算某些变量的值,编写测试类并对输出进行排序。

除了最后一步之外,这一切都已完成。不确定我是否可以在网上发布我的问题,但现在我就在这里:

我有类似的东西:

public class Pants
{
public enum SizeType {SMALL, MEDIUM, LARGE, EXTRA_LARGE}
private SizeType size; 
private String brand;
private String countryOfOrigin;
private String color;
private double price;

//Other variables and methods

}

public class Jeans extends Pants  
{ 
//new variables and methods 
}


public class Shorts extends Pants 
{
//some more new variables and methods
}

和其他类似的子类。

import java.util.ArrayList;
public class Selection
{
public static void main(String[] args){

    Jeans ex1 = new Jeans("John Lewis");
    ex1.countryOfOrigin("US");
    ex1.color("Navy");
    ex1.setSize(Pants.SizeType.LARGE);
    ex1.setprice(40);
    ex1.machineWashable(true);
    System.out.println(ex1);

    Shorts ex2 = new Shorts("Ted Baker");
    ex2.countryOfOrigin("United Kingdom");
    ex2.color("White");
    ex2.setSize(Pants.SizeType.MEDIUM);
    ex2.setprice(30);
    ex2.machineWashable(true);
    System.out.println(ex2);
//..etc

ArrayList<Pants> selection = new ArrayList<Pants>();
    selection.add(ex1);
    selection.add(ex2);
    selection.add(ex3);
    selection.add(ex4);
    selection.add(ex5);

    System.out.println( "Size - LARGE: " );
    System.out.println();
    Pants.SizeType size;
    size = Pants.SizeType.LARGE;
    ListPants(selection,size);

我需要编写一个ListPants方法来根据SizeType列出对象 - 在这种情况下以large开头。我认为我不能实现任何额外的接口(这是其他线程中最常推荐的接口)。

请参阅下面的尝试(不起作用)。我在这里思考正确的方向,还是?

public static void ListPants(ArrayList<Pants> selection, Pants.SizeType size)
{
for (Pants.SizeType sizeType : Pants.SizeType.values()) {
    for (Pants pants : selection) {
        if (pants.getSize().equals(sizeType)) {
System.out.println(selection.toString());    

2 个答案:

答案 0 :(得分:1)

我认为这只是你面临的一个小问题。您已经定义了该方法的签名,该签名应该打印出特定大小的所有裤子:

ListPants(ArrayList<Pants> selection, Pants.SizeType size)

这是正确的。现在,您的代码循环遍历所有裤子和所有可能的尺寸:

public static void ListPants(ArrayList<Pants> selection, Pants.SizeType size)
{
for (Pants.SizeType sizeType : Pants.SizeType.values()) {
    for (Pants pants : selection) {
        if (pants.getSize().equals(sizeType)) {
           System.out.println(selection.toString()); 

由于这看起来像是家庭作业,我会将我的回答用作问题:

您在size的方法体中使用ListPants参数在哪里?

答案 1 :(得分:0)

我假设您的类无法实现新接口,并且根本不使用接口。

您可以将Collections.sort(List,Comparator)Comparator一起使用,该list of sorting algorithms是为您的课程而构建的。

这样的东西
Collections.sort(selection,new Comparator<Pants>() { 

   @Override
   public int compare(Pants p1, Pants p2) { 
       //implement your compare method in here
       ...
   }
});

如果您渴望创建自己的排序算法,请查看此selection-sort。最简单的实现(虽然很慢)IMO是{{3}}