繁体   English   中英

Java:比较两个对象列表

[英]Java: compare two object lists

我正在尝试比较相同对象的两个列表,这两个列表是nodes_ccnodes_volume 它们包含几个Node对象。 Node isIDVALUE定义。 两个列表上的节点可以具有公共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)后才会中断? 你能帮我解决这个问题吗?

您可以使用一些布尔值,并在内部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;    

    }

您可以在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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM