2012-11-14 72 views
1

我創建了一個默認構造函數,它創建一個空的「手」。Java構造函數採取一個數組?

public Hand() { 
    hand = new ArrayList(); 
    } 

什麼是最有效的方法來獲得第二個構造函數採取數組卡,然後添加他們的手?

+2

*最有效的*將存儲相同的引用,如果給定的數組 - - 但有一個LOT 它的缺點。 – amit

+0

在所有我認識的比賽中,一手牌不包含很多牌。擔心這樣做的最有效方式聽起來像過早優化。我更喜歡最清晰/靈活的方式。 – madth3

回答

7

我會有一個構造函數來做到這一點。

public Hand(Card... cards) { 
    hand = Arrays.asList(cards); 
} 

或者Rohit Jain建議的ArrayList副本。

+1

注意:'Arrays.asList'給出一個固定的大小'ArrayList'。的類型:''java.util.Arrays.ArrayList' –

+0

但是之後他不能在以後添加任何卡片,而且他有一個無參數構造函數的事實表明他會想要,不是嗎? –

+0

@RohitJain:應該沒問題 - 沒有理由爲什麼'hand'不會是'List'。 – amit

4

你可以像下面這樣做: -

public Hand(String[] hands) { 
    hand = new ArrayList<String>(Arrays.asList(hands)); 
} 

或者,您可以遍歷的字符串數組和單個元素添加到您的ArrayList

public Hand(String[] hands) { 
    hand = new ArrayList<String>(); 

    for (String elem: hands) 
     hand.add(elem); 
} 

P.S: - 總是聲明一個Generic Type列表。

+1

這確實不是*最有效的* – amit

+0

@amit ..你是否建議迭代數組並將其添加到'ArrayList'? –

+0

不,我建議一個簡單而愚蠢的參考商店或Arrays.asList單獨(這完全適合假設'手'是一個'List',因爲它應該是) – amit

0

還有另一種選擇,Collections.addAll

public Hand(Card[] cards) { 
    hand = new ArrayList<Card>(); 
    Collections.addAll(hand, cards); 
} 

根據文檔:

將所有指定的元素到指定的集合。 要添加的元素可以單獨指定或作爲數組指定。此便捷方法的 行爲與 c.addAll(Arrays.asList(elements))的行爲相同,但是在大多數實現中,此方法可能運行的速度顯着加快 。