我正在尝试比较没有等于方法的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方法。
任何输入都会有所帮助
谢谢!!!
答案 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)的情况。
我希望有所帮助。如果您需要更详细的版本,请告诉我。