这里有两种方法可以合并两个有序的扑克牌子堆成为一个有序的扑克牌堆:
方法一:
方法一:
public static Deck merge(Deck d1, Deck d2) {
Deck result = new Deck(d1.cards.length + d2.cards.length);
int i = 0;
int j = 0;
for (int k = 0; k < result.cards.length; k++) {
if (j >= d2.cards.length || i < d1.cards.length && d1.cards[i].compareTo(d2.cards[j]) <= 0) {
result.cards[k] = d1.cards[i];
i++;
} else {
result.cards[k] = d2.cards[j];
j++;
}
}
return result;
}
方法2:
public static Deck merge(Deck d1, Deck d2) {
Deck result = new Deck(l1+l2);
Card[] c1 = d1.getCards();
Card[] c2 = d2.getCards();
int l1 = c1.length;
int l2 = c2.length;
Card[] sorted = new Card[l1+l2];
int i = 0;
int j = 0;
for (int k = 0;k<sorted.length;k++){
if (j >= c2.length || i < c1.length && c1[i].compareTo(c2[j]) <= 0){
sorted[k] = c1[i];
i++;
}
else {
sorted[k] = c2[j];
j++;
}
}
}
result.cards = sorted;
return result;
}
哪种方法更有效?它们真的有什么区别吗?
据我所知,第一种方法需要生成更多的对象来完成运行,比如说两个26张牌的子牌组。然而,该方法本身存储的信息较少,这让我怀疑哪种方法更有效。
我知道在这个规模上可能并不太重要,但作为一个新手,我很想知道什么是最佳实践以及为什么。我尝试搜索类似的情况,但没有找到任何。如果有人能指点我方向,我将不胜感激。
deck
在哪里声明?你认为为什么方法一会创建更多的对象?看起来它创建的对象更少——两种方法都创建了一个新的Deck
,而方法二还创建了一个Card[]
。 - tgdavies