2016-05-28 3 views
2

Можете ли вы сказать, какие преимущества (если есть какие-либо преимущества) использования getTheLastElement2() вместо getTheLastElement()? Я имею в виду, почему необходимо создать ссылку obj, когда проще просто вернуть результат?Возврат элемента из списка в java

import java.util.ArrayList; 
     import java.util.List; 

public class Test { 
    List list; 

    Test(ArrayList list){ 
     this.list = list; 
    } 

    public Object getTheLastElement(){ 
     if (list.isEmpty()) 
      return null; 
     else 
      return list.get(list.size()-1); 
    } 

    public Object getTheLastElement2(){ 
     Object obj; 
     if (list.isEmpty()) 
      obj = null; 
     else 
      obj = list.get(list.size()-1); 
     return obj; 
    } 
} 
+0

Ни одна из этих работ. –

+1

Вам нужно будет вернуть элемент 'size-1'th, а не только' size'. – Kajal

+0

Вам также может понравиться http://stackoverflow.com/questions/36707/should-a-function-have-only-one-return-statement, в котором обсуждаются плюсы и минусы наличия одной точки выхода vs несколько точек выхода в функции. В вашем примере кода я бы предположил, что 'getTheLastElement()' является более читаемым и будет даже больше без инструкции 'else'. – mhawke

ответ

2

Нет никакой разницы между этими двумя реализациями: ссылка obj, вероятно, будет оптимизирована.

Вы получаете небольшое преимущество при отладке кода, потому что вы можете установить точку останова в операторе returngetTheLastElement2 и знать, что он всегда будет удален. Это контрастирует с getTheLastElement, где вам понадобятся две точки останова для проверки возвращаемого значения.

Обратите внимание, что else в первом примере, является избыточным:

public Object getTheLastElement(){ 
    if (list.isEmpty()) { 
     return null; 
    } 
    return list.get(list.size()-1); 
} 

Вы могли бы еще больше сжать это к одному трехкомпонентному выражению:

public Object getTheLastElement(){ 
    return !list.isEmpty() ? list.get(list.size()-1) : null; 
} 
+0

Может ли это повлиять на время выполнения? – webpersistence

+0

@rEx Нет, он избыточен и будет устранен компилятором. С точки зрения скорости выполнения все они равны. – dasblinkenlight

1

Нет, нет никакого преимущества. Кроме того, вы должны вернуть list.get(list.size()-1)

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