2016-11-03 3 views
0

Я должен разработать простой код, как это:Поставщик Java может оптимизировать процесс создания объекта?

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; 
} 

} 

Каждый раз, когда программа называют метод «GetList» новый объект песни1 создается в памяти. Я пытаюсь найти лучший способ для оптимизации этого поведения, и я должен изменить код таким образом:

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; 
} 

} 

У меня есть создать Поставщик в качестве переменного экземпляра и в методе «GetList» я просто называю его ПОЛУЧАЕТ метод для создания объекта.

Может ли это лучший подход для оптимизации кода?

Заранее спасибо

+0

Чтобы сделать код более элегантным, я бы поставил параметр 'varargs' в' getList() '. Поставщик не приносит никаких преимуществ здесь, поскольку список создается каждый раз, когда вызывается 'getList()', используется ли поставщик или нет. – Kayaman

ответ

1

Это не оптимизируют код на всех. Вы все равно создаете новый ArrayList каждый раз, за ​​исключением того, что вместо прямого вызова конструктора вы вызываете поставщика, который вызывает конструктор. Так что это на самом деле незначительно медленнее и гораздо менее прямолинейно.

Я бы просто использовал new ArrayList<>(Arrays.asList(n)). Это, по крайней мере, имело бы преимущество при инициализации ArrayList с начальным размером, который достаточно велик, чтобы содержать все элементы в массиве и таким образом избегать операций изменения размера для больших массивов. Или просто Arrays.asList(n), если допустим список фиксированного размера, который поддерживается исходным массивом.

Смежные вопросы