2013-07-06 60 views
0

我有以下的抽象類如何設計交集操作對不同類型的一組

public abstract class Set implements Iterable<String> 
{ 
    public abstract boolean contains(String value); 
    public Iterator<String> iterator(); 
} 

與以下實現

public EmptySet extends Set { 
    // a set that does not contain any value 
} 

public EnumSet extends Set { 
    private List<String> values; 
    // a set that contains a fixed list of values 
} 

public StringSet extends Set { 
    private List<Character> alphabet; 
    private int minLength; 
    private int maxLength; 
    // a set of all strings consisting of the given characters and for which minLength <= length <= maxLength 
} 

public DifferentFromDecorator extends Set { 
    private Set origSet; 
    private List<String> illegalValues; 
    // a set which contains the values of another set minus a list of values 
} 

新的實施,預計在未來的工作。

我現在想實現具有以下簽名的交集操作:

public Set intersection(Set firstSet, Set secondSet) 

什麼是執行的操作,避免複雜的樣板代碼的好辦法?請注意,我知道有效地找到這兩種類型的交集的步驟。我對有關(可能)很多組合的良好設計模式感興趣。

+0

我認爲交集方法應該是類「Set」的一部分,以便可以調用Set intersection = setA.intersection(setB)。另外,由於您已經提取了「Set」的概念,因此不確定您所指的是哪個鍋爐板代碼。 Set實現中發生的事情不會成爲Set用戶的關注點 –

回答

0

我能想到的唯一解決方案是迭代第一組中的每個元素,然後使用檢查它是否存在於第二組中。

0

retainAll()

僅保留此組中包含的指定集合(可選操作)中的元素。換句話說,從該集合中刪除所有未包含在指定集合中的元素。如果指定的集合也是集合,則此操作將有效地修改此集合,使其值爲兩個集合的交集。

相關問題