Java:比较两个对象列表

时间:2015-12-29 14:25:48

标签: java list object

我尝试比较两个相同对象的列表,这两个列表是nodes_ccnodes_volume。它们包含多个Node个对象。由Node isID定义的VALUE。两个列表上的节点可以具有公共ID,但不具有公共值。

我想比较这样的列表:我控制第一个列表列表(nodes_cc),如果我遇到的节点没有出现在第二个列表(nodes_volume)上,控件必须停止,即使我发现其他节点甚至属于第二个列表。我想要休息,所以我尝试了这个:

 int count=0;

for (int i=0;i<cc_nodes.size();i++){
    Node node = cc_nodes.get(i);
    for(int j=0;j<volume_nodes.size();j++){       
      Node node2 = volume_nodes.get(j);
        if (node.id==node2.id){
            count++;                      
        }
        else {
            break;         
        }       
    } 
}

问题是:for循环仅在第一次检查后(计数为1),我做错了?你可以帮忙解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

您可以使用一些布尔值,并在内部for循环后检查它:

 int count=0;

    for (int i=0;i<cc_nodes.size();i++){

        Node node = cc_nodes.get(i);
        boolean found = false;

        for(int j=0;j<volume_nodes.size();j++){       
          Node node2 = volume_nodes.get(j);
            if (node.id==node2.id){
                count++; 
                found = true;           
            }

        } 

        if(!found)
          break;    

    }

答案 1 :(得分:0)

你可以覆盖Node对象中的.equals()和.hashcode()方法,使用id作为比较器然后:

int count=0;

for (Node node : cc_nodes){
    if(volume_nodes.contains(node))
      count++;
    else 
      break;
}

您可以在Node对象中添加它(如果id是int值)

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + id;
    return result;
}

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    Node other = (Node) obj;
    if (id != other.id)
        return false;
    return true;
}