我今天遇到了这段令人费解的代码:
public List<MyObject> toNewList(List<MyObject> someObjects) {
return new ArrayList<>(Arrays.asList(someObjects.toArray(new MyObject[someObjects.size()])));
}
上述代码与以下代码段之间有什么区别吗?
public List<MyObject> toNewList(List<MyObject> someObjects) {
return new ArrayList<>(someObjects);
}
修改 回顾提交历史记录可以深入了解转换代码。以下是每个例子:
第一次提交:
return someObjects.toArray(new MyObject[0]);
第二次提交:
return Arrays.asList(someObjects.toArray(new MyObject[0]));
第三次提交:
return Arrays.asList(someObjects.toArray(new MyObject[someObjects.size()]));
最终提交:
return new ArrayList<MyObject>(Arrays.asList(someObjects.toArray(new MyObject[someObjects.size()])));
绝对是一个清理杂乱代码的好提醒!
答案 0 :(得分:3)
根本没有功能差异。两者都调用ArrayList的same constructor,第一个是多余的。
首先,您正在进行将List转换为List的往返,这完全是不必要的。第二种方式简单而干净。