从方法Java中分配返回的List

时间:2015-08-05 18:38:37

标签: java

我正在尝试从test方法返回一个List,我发现有两个选项可以做到这一点。 (Option 1Option 2位于以下代码段中。 我想知道这两个中哪一个是首选的OPTION及其原因(如果可能的话)。

public class Test {
    public static void main(String a[]) {
        //OPTION 1
        List<Double> outer = new ArrayList<Double>(test());

        //OPTION 2
        List<Double> temp = test();
        if(temp != null && temp.size() > 0) {
            for(Double entry: temp) {
                System.out.println("entry = " + entry);
            }
        }
    }

    public static List<Double> test() {
        List<Double> inner = new ArrayList<Double>();
        inner.add(123.0);
        inner.add(234.0);
        return inner;
    }
}

5 个答案:

答案 0 :(得分:1)

选项2更好。选项1是一个构造函数,允许您创建List并对其进行初始化,使其以现有Collection中的值开头。第一个选项是直接的标准List作业。

答案 1 :(得分:1)

除非您有特定用例,否则选项2更好,因为您只需将返回的列表分配给变量temp

在第一种情况下,即使你只能在构造函数中传递test()的结果,在内部它也必须将test()返回的所有值复制到新创建的列表中{{1} },这是一个开销,而且你现在有两个相同列表的副本

答案 2 :(得分:0)

区别很简单:
Opt1创建由test()生成的列表的副本,并将副本分配给outer。 Opt2按值分配。这意味着test()创建的列表会直接分配给outer。是否使用Opt1或Opt2取决于具体情况。在这种情况下,Opt2会更有效率,因为不必要的复制操作会消失。如果例如列表在调用test()之前存在并且只会被修改为int test()并且不会被用作只读,那么副本将是必要的。

答案 3 :(得分:0)

据我所知,人们想要使用第一个选项的唯一原因是确保List确实是ArrayList。但是,在其余的代码中,您所做的只是遍历此列表。所以你并没有真正使用任何特别偏向于ArrayList的功能。

因此,我会说选项2更好。

  1. 执行与选项1
  2. 相同的操作
  3. 更具可读性。
  4. 它不会浪费任何时间转换ArrayList(顺便说一下,这是不必要的,因为test()方法返回列表inner,这是一个ArrayList开头。

答案 4 :(得分:0)

您可以使用任何OPTION,它们都不是首选。最好的是使用类,属性,对象,非静态方法

{
    "access_token": "...",
    "machine_id": "...",
    "expires_in": 5184000
}