【发布时间】:2018-02-09 11:18:20
【问题描述】:
我有两个相同类的对象(包含对象列表)。我需要找出两者是否相同。
考虑下面的例子:
class Device {
String deviceName;
String devLocation;
String devType;
String devID;
public String getDeviceName() {
return deviceName;
}
public void setDeviceName(String deviceName) {
this.deviceName = deviceName;
}
public String getDevLocation() {
return devLocation;
}
public void setDevLocation(String devLocation) {
this.devLocation = devLocation;
}
public String getDevType() {
return devType;
}
public void setDevType(String devType) {
this.devType = devType;
}
public String getDevId() {
return devID;
}
public void setDevId(String devId) {
this.devID = devId;
}
}
class DevList {
List<Device> deviceList;
public List<Device> getDevices() {
return deviceList;
}
public void setDevices(List<Device> deviceList) {
this.deviceList = deviceList;
}
}
需要比较 DevList 类的两个对象。
将在每个固定时间间隔获得一个新的 DevList 对象。
每次我需要用前一个对象验证当前对象并更新数据库,如果有任何差异,则忽略。
当前和先前对象中的列表(deviceList)可能顺序不同。
例如:
考虑以下两个 Json 格式的对象(请忽略 json 格式错误)。
对象 1:
{
"devList":[
{
"deviceName":"ABC",
"devLocation":"India",
"devType":"Router",
"devID":"1111"
},
{
"deviceName":"XYZ",
"devLocation":"India",
"devType":"Router",
"devID":"2222"
}
]
}
对象 2:
{
"devList":[
{
"deviceName":"XYZ",
"devLocation":"India",
"devType":"Router",
"devID":"2222"
},
{
"deviceName":"ABC",
"devLocation":"India",
"devType":"Router",
"devID":"1111"
}
]
}
我们可以通过检查 devID 来迭代两个对象中的列表来做到这一点。但复杂度是 M*N。
还有其他方法吗?
【问题讨论】:
-
如果您希望两个设备列表仅在它们的顺序不同时被视为相等,那么您需要使用
Set<Device>而不是List<Device>。请注意,您还需要在Device类中添加正确的equals(Object)和hashCode()方法。