我創建了一個默認構造函數,它創建一個空的「手」。Java構造函數採取一個數組?
public Hand() {
hand = new ArrayList();
}
什麼是最有效的方法來獲得第二個構造函數採取數組卡,然後添加他們的手?
我創建了一個默認構造函數,它創建一個空的「手」。Java構造函數採取一個數組?
public Hand() {
hand = new ArrayList();
}
什麼是最有效的方法來獲得第二個構造函數採取數組卡,然後添加他們的手?
我會有一個構造函數來做到這一點。
public Hand(Card... cards) {
hand = Arrays.asList(cards);
}
或者Rohit Jain建議的ArrayList副本。
注意:'Arrays.asList'給出一個固定的大小'ArrayList'。的類型:''java.util.Arrays.ArrayList' –
但是之後他不能在以後添加任何卡片,而且他有一個無參數構造函數的事實表明他會想要,不是嗎? –
@RohitJain:應該沒問題 - 沒有理由爲什麼'hand'不會是'List'。 – amit
你可以像下面這樣做: -
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
列表。
還有另一種選擇,Collections.addAll
:
public Hand(Card[] cards) {
hand = new ArrayList<Card>();
Collections.addAll(hand, cards);
}
根據文檔:
將所有指定的元素到指定的集合。 要添加的元素可以單獨指定或作爲數組指定。此便捷方法的 行爲與 c.addAll(Arrays.asList(elements))的行爲相同,但是在大多數實現中,此方法可能運行的速度顯着加快 。
*最有效的*將存儲相同的引用,如果給定的數組 - - 但有一個LOT 它的缺點。 – amit
在所有我認識的比賽中,一手牌不包含很多牌。擔心這樣做的最有效方式聽起來像過早優化。我更喜歡最清晰/靈活的方式。 – madth3