2014-07-19 46 views
2

我在數據庫中有一個包含3個值did,pid和fid的表。這是類似如下:檢查重複值的響應

--------------------- 
    | did | fid | pid | 
    --------------------| 
    | 259 | 431 | 128 | 
    --------------------| 
    | 259 | 431 | 132 | 
    |-------------------| 
    | 260 | 432 | 128 | 
    --------------------| 
    | 260 | 432 | 129 | 
    |-------------------| 
    | 260 | 432 | 132 | 
    |-------------------| 
    | 261 | 460 | 128 | 
    --------------------| 
    | 261 | 460 | 132 | 
    |-------------------| 

現在,如果有任何新的條目出現。我想在表格中查看它存在與否。它們都不是唯一的。在答覆中,必須明確所有人對於新條目都不能相同。

我正在使用目前雙for loop這是行不通的。

預先感謝

EDITED

公共類DetailingTripleCheck {

private int nid; 
private int did; 
private int fid; 

public DetailingTripleCheck() { 
    // TODO Auto-generated constructor stub 
} 

public DetailingTripleCheck(int nid, int did, int fid) { 
    this.nid = nid; 
    this.did = ddnid; 
    this.fid = fid; 
} 

public int getNid() { 
    return nid; 
} 

public void setNid(int nid) { 
    this.nid = nid; 
} 

public int getDid() { 
    return did; 
} 

public void setDid(int did) { 
    this.did = did; 
} 

public int getFid() { 
    return fid; 
} 

public void setFid(int fid) { 
    this.fid = fid; 
} 

@Override 
public boolean equals(Object o) { 
    // TODO Auto-generated method stub 
    return super.equals(o); 
} 

@Override 
public int hashCode() { 
    // TODO Auto-generated method stub 
    return super.hashCode(); 
} 

} 

當我使用這個類:

for (int i = 0; i < NewDids.length; i++) { 
        if (OldDids.length > 0) { 
         DetailingTripleCheck ddSet = new DetailingTripleCheck(); 
         ddSet.setDdnid(Integer.parseInt(NewDids[i])); 
         ddSet.setProdNid(Integer.parseInt(NewNids[i])); 
         ddSet.setFid(Integer.parseInt(Newfids[i])); 
         HashSet<DetailingTripleCheck> set = new HashSet<DetailingTripleCheck>(); 

         for (int j = 0; j < OldDids.length; j++) { 
          DetailingTripleCheck triple = new DetailingTripleCheck(
            Integer.parseInt(OldDids[j]), 
            Integer.parseInt(OldNids[j]), 
            Integer.parseInt(OldFids[j])); 
          if (set.contains(triple)) { 
           System.out.println("TRUE"); 


          } else { 
           System.out.println("FALSE"); 


          } 
         } 
} 
+0

創建一個新類'Triple'包含3個字段,[覆蓋'的hashCode()'和'的equals()'](http://stackoverflow.com/q/27581/572670),和將表存儲在['HashSet'](http://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html)中。 – amit

+0

@amit感謝您的迅速響應。你能舉個例子嗎? – user3154663

回答

1

假設這些字段是int s(如果假設錯誤,容易修改)。

創建一個新類,稱其爲Triple,包含3個字段:

class Triple { 
    int did, fid, pid; 
    Triple(int did, int fid, int pid) { 
    this.did = did; 
    this.fid = fid; 
    this.pid = pid; 
    } 
    ... 
} 

確保您override hashCode() and equals()(Eclipse IDE中可以自動幫你做到這一點)。

現在,存儲你的數據在HashSet

HashSet<Triple> set = new HashSet<>(); 

一旦元素被添加,檢查它是否已經存在使用contains()方法,如果它不是 - 它添加到組。

Triple triple = new Triple(did,fid,pid) 
if set.contains(triple) { 
    //do something 
} else { 
    set.add(triple) 
} 
+0

什麼應該在hashCode和等於方法? public boolean equals(Object o){ \t \t // TODO自動生成方法存根 \t \t return super.equals(o); \t} 公衆詮釋的hashCode(){ \t \t // TODO自動生成方法存根 \t \t返回super.hashCode(); \t} – user3154663

+0

@ user3154663如果您使用的是Eclipse IDE,您可以使用Source - > Generate hashCode和equals()來自動生成它們... – amit

+0

任何邏輯,我必須放在裏面,或者只在上面粘貼的代碼上面評論。 – user3154663