2012-09-02 251 views
2

我確實有int對集合,即; (int,int)集合集合中的唯一集合

1)給定k個這樣的對,檢查它們是否唯一。即;使用k對形成的集合的大小是k? 2)如果給定的k個記錄是唯一的,則按排序順序(按x和y解決衝突)存儲它們。3)給定n個這樣的k組,

的要求1實施例和圖2
如果k = 3

(100,100)(110,300)(120,200)是一組有效的和以排序的順序。 (100,100)(300,200)(200,300)是有效集合,但不是按排序順序。
(100,100)(100,200)(100,200)是在有效集的要求3
輸入

實施例:

(100,100)(200,300 )(300,200)
(100,100)(200,300)(300,200)
(100,100)(201,300)(300,200)

輸出:

(100,100)(200,300)(300,200)
(100,100)(201,300)(300,200)

這是最接近類似於我正面臨着真正的問題。我需要用Java完成這項工作,而且我從未在java中工作過。我是一名中級C++程序員。

我可以解決1和2通過一些醜陋的編碼和排序。
但是我不能夠得到3.下面是我能得到迄今3類對實現可比

(POC代碼)

import java.util.HashSet; 
public class set { 
    public static void main (String []args) { 
     HashSet<Pair> s1 = new HashSet(); 
     s1.add(new Pair(10,10)); 
     s1.add(new Pair(10,10)); 

     HashSet<Pair> s2 = new HashSet(); 
     s2.add(new Pair(10,10)); 
     s2.add(new Pair(10,10)); 

     HashSet<HashSet<Pair>> s12 = new HashSet(); 
     s12.add(s1);s12.add(s2); 
     for (HashSet<Pair> hs : s12) { 
      for (Pair p : hs) { 
       System.out.println(""+ p.toString()); 
      } 
     } 
    } 
} 
+3

這是一門功課? –

+0

是和否 我開始通過作業問題探索計算幾何算法。在移動行掃描和其他算法之前,我想自己試一試 http://en.wikipedia.org/wiki/Line_segment_intersection –

+0

HashSet代碼的HashSet究竟有什麼錯誤?它看起來不錯,給予或採取一些未經檢查的操作。 –

回答

2

看起來你沒有重載equals和/或配對類中的hashCode方法。

例如,如果你Pair類具有以下結構:

protected K value1; 
protected V value2; 

你應該實現equalshashCode爲(例如):

public boolean equals(Object obj) { 
    if (!(obj instanceof Pair)) 
     return false; 
    Pair that = (Pair)obj; 
    boolean result = true; 
    if (this.getValue1() != null) 
     result = this.getValue1().equals(that.getValue1()); 
    else if (that.getValue1() != null) 
     result = that.getValue1().equals(this.getValue1()); 

    if (this.getValue2() != null) 
     result = result && this.getValue2().equals(that.getValue2()); 
    else if (that.getValue2() != null) 
     result = result && that.getValue2().equals(this.getValue2()); 

    return result; 
} 


public int hashCode() { 
    int result = value1 != null ? value1.hashCode() : 0; 
    result = 31 * result + (value2 != null ? value2.hashCode() : 0); 
    return result; 
} 
+0

看起來像這是我失蹤。但總的來說,是否有更好的方法來處理問題? –

+0

我認爲更好的方法是使用TreeSet而不是HashSet,因爲您希望按排序順序存儲對象對象。無論如何你必須實現equals和hashCode .. –