我正在尝试从test
方法返回一个List,我发现有两个选项可以做到这一点。 (Option 1
和Option 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;
}
}
答案 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更好。
ArrayList
(顺便说一下,这是不必要的,因为test()
方法返回列表inner
,这是一个ArrayList
开头。答案 4 :(得分:0)
您可以使用任何OPTION,它们都不是首选。最好的是使用类,属性,对象,非静态方法
{
"access_token": "...",
"machine_id": "...",
"expires_in": 5184000
}