ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java-在这里调用实例方法或声明变量更好吗?

2019-11-09 02:00:49  阅读:18  来源: 互联网

标签:java



这是一种将两种有序子扑克牌子合并到一个有序牌组中的方法的两种方法:

方法1:

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;
}

方法二:

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张卡片副牌.但是,该方法本身将存储较少的信息,这使我怀疑哪种方法会更有效.

我知道在这种规模上可能并没有太大关系,但是作为Java的新手,我很好奇知道什么是最佳实践以及为什么.我尝试搜索类似的情况,但没有找到任何解决方案.如果有人能指出我正确的方向,将不胜感激.

解决方法:

您的第一种方法将创建两个对象-新的Deck对象,以及存储卡的数组(由Deck构造函数创建的数组).第二种方法将创建3个对象-新的Deck,Deck构造函数创建的数组以及名为sorted的数组.

但是,这并不重要,因为您根本没有创建Card对象.您只是将两个卡座中的Card对象的引用复制到新卡座!将卡分配给阵列不会创建新卡.就像以下内容不会创建两个对象:

Object obj = new Object();
Object obj2 = obj;

因此,实际上这两种方法是相同的.我建议您使用最容易阅读的一种.



标签:java

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有