簡體   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