比较不同类型的列表值

时间:2015-02-16 16:48:28

标签: java

我正在尝试比较没有等于方法的Car类型列表。

Car.java

public class Car {
    private int carNumber;
    private String carName;

    public Car(int carNumber, String carName)
    {
        super();
        this.carNumber = carNumber;
        this.carName = carName;
    }

    /**
     * @return The carNumber.
     */
    public int getCarNumber()
    {
        return carNumber;
    }

    /**
     * @param carNumber The carNumber to set.
     */
    public void setCarNumber(int carNumber)
    {
        this.carNumber = carNumber;
    }

    /**
     * @return The carName.
     */
    public String getCarName()
    {
        return carName;
    }

    /**
     * @param carName The carName to set.
     */
    public void setCarName(String carName)
    {
        this.carName = carName;
    } }

主要课程:

import java.util.ArrayList;
import java.util.List;

public class ListCar
{
    public static void main (String[] args)
    {
        Car carList1_a = new Car(1, "Camry");
        Car carList1_b = new Car(2, "Corolla");
        Car carList1_d = new Car(3, "BMW");

        Car carList2_d = new Car(3, "BMW");
        Car carList2_a = new Car(2, "Corolla");
        Car carList2_b = new Car(1, "Camry");

        List<Car> carList1 = new ArrayList<Car>();
        carList1.add(carList1_a);
        carList1.add(carList1_b);
        carList1.add(carList1_d);

        List<Car> carList2 = new ArrayList<Car>();
        carList2.add(carList2_b);
        carList2.add(carList2_d);
        carList2.add(carList2_a);

        System.out.println(compareLists(carList1, carList2));
    }
public static boolean compareLists(List<Car> prevList, List<Car> modelList) 
{
    if (prevList!= null && modelList!=null && prevList.size() == modelList.size()) 
    {
        boolean indicator = false;
        for (Car modelListdata : modelList) 
        {
            for (Car prevListdata : prevList) 
            {
                if (prevListdata.getCarName().equals(modelListdata.getCarName()) && prevListdata.getCarNumber() == modelListdata.getCarNumber()) 
                {
                    return  true;
                }
                if (modelListdata.getCarName().equals(prevListdata.getCarName())) 
                {
                    indicator = false;
                    break;
                } 
                else
                {
                    indicator = true;
                }
            }
        }
        if (indicator)
        {
            return true;
        }
    }
    return false; 
}
}

上面的方法compareLists()没有比较整个列表,我正在寻找即兴的方法来比较Car类型列表的每个元素,而不管顺序如何。在Car类中没有equals方法。

任何输入都会有所帮助

谢谢!!!

3 个答案:

答案 0 :(得分:3)

您需要迭代第一个List并检查每个元素是否在第二个列表中。如果您在第二个列表中找到了未找到的元素,则列表会有所不同。

实施可能是:

public static boolean compareLists(List<Car> prevList, List<Car> modelList) 
{
    boolean listEquals = true;
    if (prevList!= null && modelList!=null && prevList.size() == modelList.size()) 
    {
        for (Car modelListdata : modelList) 
        {
            boolean elementInList = false;
            for (Car prevListdata : prevList) 
            {
                if (prevListdata.getCarName().equals(modelListdata.getCarName()) && prevListdata.getCarNumber() == modelListdata.getCarNumber()) 
                {
                    /* The list has the element, set the flag to true and break the loop */ 
                    elementInList = true;
                    break;
                }
            }
            if (elementInList == false) {
                /* There is one element not found in the second list, the lists are not equals */
                listEquals = false;
                break;
            }
        }            
        return listEquals;
    } else {
        /* At least one list is null or the size is not the same */
        return false;
    }
}

如果您在Car类中实现equals()hashCode()方法,则代码要简单得多,因为您可以使用列表的contains()方法:

public static boolean compareListsEquals(List<Car> prevList, List<Car> modelList) 
{
    if (prevList!= null && modelList!=null && prevList.size() == modelList.size()) 
    {
        for (Car modelListdata : modelList) 
        {
            if (prevList.contains(modelListdata) == false) {
                return false;
            }
        }            
        return true;
    } else {
        /* At least one list is null or the size is not the same */
        return false;
    }
} 

答案 1 :(得分:0)

检查return true是否是明智之举。

[编辑]

好的,因为它闻起来像家庭作业,我只是想暗示一下......但是这里是汤匙。

大卫的答案非常好,所以我不会重申答案。没有双关语。

答案 2 :(得分:0)

如果你想看看列表是否相等而不使用相同的汽车方法,那么你应该: 的 1。停止使用迭代器。
您应该将第一个元素与第一个元素进行比较。第二次与第二次等 您需要在两个列表中的相同位置使用元素 如果列表具有不同数量的元素,它将起作用 - 它将不相等 使用迭代器是有问题的。
2。仅检查not equal元素 - 在这种情况下return false 第3。在算法结束时return true - 检查并传递每个元素时 4. 确保正确处理具有不同大小的列表(返回false)或其中一个为null(返回false)或两者都为null(返回true)的情况。

我希望有所帮助。如果您需要更详细的版本,请告诉我。