在Java中向数组提供元素时,最佳实践是什么?

时间:2018-11-09 22:18:34

标签: java arrays

从python迁移过来后,我正在学习java。可以为数组分配值的方式对我来说有点新。我可以使用这个:

    stmt -> assignment SEMI | RETURN stmt_prime 
   | LBRACE stmt_list RBRACE 
   | IF LPAREN assignment RPAREN stmt stmt_prime_prime 
   | FOR LPAREN assignment SEMI assignment SEMI assignment RPAREN stmt | 
    stmt_prime -> SEMI | -> assignment SEMI
    stmt_prime_prime -> NOELSE 
    | ELSE stmt
    assignment -> ID typ ASSIGN expr | expr  
    expr -> TE* 
    E* -> + TE* | -TE* | epsilon
    T -> FT*
    T* -> * FT* | / FT* | epsilon
    F -> (E) | int_literal | TRUE | FALSE

或者:

int[] myArray = new int[size];
for (int i = 0; i < size; i++) {
    a[i] = i;
}

我知道我可以使用ArrayList类做其他事情,并且可以使用在程序编译时更新的变量来更改大小,但是在这两种方法中,这是最佳实践吗?有关系吗?

2 个答案:

答案 0 :(得分:4)

  

哪个被认为是最佳实践?有关系吗?

首先,提防“最佳实践”。在编程世界中,它几乎不存在

  • 提防那些告诉您某些事情是“最佳实践”的人。以健康的怀疑态度对待他们所说的话。
  • 避免要求“最佳做法”。几乎可以肯定这是一个错误的问题。

阅读并考虑一下:


对您的问题。您介绍了两种初始化数组的不同方法,但是它们具有不同的特征。

  • 第一个从一个开始,以递增顺序创建和初始化数字数组。数组的大小是一个参数,此代码适用于不同的大小。

  • 第二个也创建并初始化一个数字数组,该数字数组从一个开始递增。但是在这种情况下,数组的大小由源代码中初始化程序中的数字数量决定;即

    int[] otherArray = {1, 2, 3, 4};    // produces a 4 value array
    

    int[] otherArray = {1, 2, 3, 4, 5}; // produces a 5 value array
    

那哪个更好?

这取决于您要尝试执行的操作。

  • 如果您想要一个始终具有相同数量数字的小数组,则第二种方法更简单(可以说)更好。
  • 如果您想要一个没有简单算法来生成值的数组,那么第一种方法(依赖于简单算法)将不起作用。
  • 如果要初始化大数组(例如数百个元素),第二种方法很麻烦。
  • 如果size需要改变,显然第二种方法不起作用。

这里是否有“最佳实践”?

显然,没有。不同的问题需要不同的方法。千篇一律的“最佳实践”是行不通的,更不用说是所有问题的最佳解决方案了。

这种推理适用于编程中的绝大多数“最佳实践”问题。

答案 1 :(得分:2)

我认为这两种方法在您需要的情况下都很好。如果您知道大小,并且确定边界正确,则第一个可以正常工作。仅当您在创建时已经知道数组中每个元素的值时,才能完成第二个操作。

公认的答案在回答这样一个问题的哲学上做得更好。