2014-02-26 64 views
0

我有兩套A和B.我必須找到聯合,交叉和差異。現在我正在關注一個交集方法,我試圖實現retainAll()方法。爲什麼retainAll()返回一個空的列表?

我不會包含我所有的代碼,只是涉及我正在嘗試完成的方法和數據字段。

我的問題在於試圖找到交集。出於某種原因,當我運行測試時,我得到一個空的列表。我只在輸出屏幕上得到空括號。我無法弄清楚爲什麼會發生這種情況,但我覺得它與構造函數有關,或者我如何設置retainAll方法。注意:這只是發生在交會法,工會法的作品完美

感謝您的任何投入,我非常感激

public class Set<T> { 

//data fields 
private LinkedList<T> L = new LinkedList<T>(); 
private int size; 

//constructor Set with argument used in intersection method 
public Set(Set<T> b) { 

} 


public void add(T item){ 
    L.add(item); 
    size ++; 
} 

// will remove first instance of specified item 
public void remove(T item){ 
    L.remove(item); 
    size--; 
} 


public void retainAll(Set<T> x){ 
    L.retainAll(L); 
} 

public String toString(){ 
    return L.toString(); 
} 

public Iterator<T> iterator(){ 
    return L.iterator(); 
} 



    public static <T> HashSet<T> union(Set<T> a, Set<T>b){ 
    //create new set c, which will be the combination of A and B 
    HashSet<T> c = new HashSet<T>(); 
    Iterator<T> iter1 = a.iterator(); 
    Iterator<T> iter2 = b.iterator(); 

    //go through set A, add to new union 
    while(iter1.hasNext()){ 
     c.add(iter1.next()); 
    } 

    //go through set B, add to new union 
    while(iter2.hasNext()){ 
     c.add(iter2.next()); 
    } 

    return c; 






public static <T> Set<T> intersection(Set<T> a, Set<T>b){ 
    //create new set intersection, which will contain common items of set A and B 
    Set<T> c = new Set<T>(a); 
    c.retainAll(b); 
    return c; 

回答

0
Set<T> c = new Set<T>();  
c.retainAll(b); 
return c; 

c,不具有任何的a要素入手。事實上,您從未在該代碼塊的任何地方提及過a。也許你的意思

Set<T> c = new Set<T>(a);  
+0

對不起,剛編輯它。 「a」最初是一個參數,但當我問我的問題時,我不小心將它遺漏了。而不管。即使「a」是一個參數,它仍然不起作用 – overboard182

+0

然後我懷疑這個問題可能是你的構造函數Set(Set b)'可能不正確。請提供該代碼。 –

+0

我實際上沒有代碼裏面的構造函數。我只是設置它,以便Set c = new Set ()可以接受一組作爲參數而不會出現錯誤。你建議向構造函數中添加一些代碼嗎?我不知道該怎麼做。 – overboard182

0

//構造設置在路口方法

public Set(Set<T> b) { 

} 

使用在你需要編寫的代碼爲一個集合的元素複製到其他的,因爲你的構造是上述構造函數的參數什麼也不做。它只是簡單地採取既定的論點。

public static <T> Set<T> intersection(Set<T> a, Set<T>b){ 
    //create new set intersection, which will contain common items of set A and B 
    Set<T> c = new Set<T>(a); 
    c.retainAll(b); 
    return c; 

在上述方法中,當不復制的「a」至「c」的所述retainsAll方法將只返回空的元素。 PS:請用構造函數做些什麼。

相關問題