我必须开发一个像这样的简单代码:
public class TestSupplier {
public static void main(String[] args) {
// TODO Auto-generated method stub
TestSupplier ts1 = new TestSupplier();
List<String> lman = ts1.getList(new String[]{"Bob","Tom","Jack","Rob"});
List<String> lwom = ts1.getList(new String[]{"Barbara","Francesca","Jenny","Sim"});
List<String> ldog = ts1.getList(new String[]{"Ciuffy","Red","Fido"});
}
public List<String> getList (String[] n) {
List<String> list1 = new ArrayList<String>();
for (int i = 0; i < n.length ; i++) {
list1.add(n[i]);
}
return list1;
}
}
每次程序调用&#34; getList&#34;方法在内存中创建一个新的list1对象。 我试图找到一种优化此行为的最佳方法,并且我已经以这种方式修改了代码:
public class TestSupplier {
Supplier<List<String>> lsup = ArrayList<String>::new;
public static void main(String[] args) {
// TODO Auto-generated method stub
TestSupplier ts1 = new TestSupplier();
List<String> lman = ts1.getList(new String[]{"Bob","Tom","Jack","Rob"});
List<String> lwom = ts1.getList(new String[]{"Barbara","Francesca","Jenny","Sim"});
List<String> ldog = ts1.getList(new String[]{"Ciuffy","Red","Fido"});
}
public List<String> getList (String[] n) {
List<String> list1 = lsup.get();
for (int i = 0; i < n.length ; i++) {
list1.add(n[i]);
}
return list1;
}
}
我已经在&#34; getList&#34;中创建了一个供应商作为实例变量。方法我只是调用他的get方法来创建对象。
这可能是优化代码的最佳方法吗?
提前致谢
答案 0 :(得分:1)
根本不优化代码。你每次都在创建一个新的ArrayList,除了不是直接调用构造函数,你调用一个调用构造函数的供应商。所以它实际上稍微慢一些,而且不那么简单。
我会使用new ArrayList<>(Arrays.asList(n))
。这至少具有初始化ArrayList的优势,初始大小足以包含数组中的所有元素,因此将避免大型数组的大小调整操作。如果原始数组支持的固定大小列表可以接受,则只需Arrays.asList(n)
。