2015-08-05 3 views
1

Я пытаюсь вернуть список из метода test, я вижу, что для этого есть два варианта. (Option 1 и Option 2 в приведенном ниже фрагменте кода). Я хотел бы знать, какой из этих двух является предпочтительным ВАРИАНТОМ и причиной его (если это возможно).Назначение возвращаемого списка из метода Java

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

* Я хотел бы знать, что является предпочтительным вариантом ВАШЕГО варианта для чего? –

+0

Не могли бы вы четко сформулировать свой вопрос? –

+1

@ShreyasChavan Я думаю, что OP ссылается на комментарии, вариант 1 и вариант 2, для использования возвращаемого значения 'test()'. OP, вариант 2. Я никогда не видел вариант 1 и не могу придумать причину, по которой вы * бы это сделали. – Michelle

ответ

1

Вариант 2 лучше. Вариант 1 - это конструктор, который позволяет создать List и инициализировать его так, чтобы он начинался со значений в существующем Collection. Первый вариант - прямое, стандартное задание List.

0

Разницы довольно прост:
Opt1 создает копию списка, порожденный test() и присваивает копию outer. Opt2 присваивает значение. Это означает, что список, созданный test(), присваивается только outer. Использовать Opt1 или Opt2 зависит от обстоятельств. В этом случае Opt2 будет более эффективным, так как ненужная операция копирования отпадает. Копия будет необходима, если, например, список существовал бы до вызова test() и был бы только изменен int test() и не использовался бы только для чтения.

0

Насколько я вижу, единственная причина, по которой вы хотели бы использовать первый вариант, - обеспечить, чтобы List действительно был ArrayList. Но в остальной части вашего кода все, что вы делаете, выполняется через этот список. Таким образом, вы не используете какую-либо особенность, которая особенно предвзята в пользу ArrayList.

Поэтому я бы сказал, что вариант 2 лучше.

  1. Он выполняет такой же, как вариант 1
  2. Это более читаемым.
  3. Это не тратить время превращающего к ArrayList (который, кстати, является излишним, так как метод test() возвращает список inner, который является ArrayList начать с.
1

Если у вас нет конкретный вариант использования, вариант 2 лучше, потому что вы просто назначили возвращенный список переменной temp.

В первом случае, хотя вы можете просто передать результат в test() в конструктор, внутри он должен будет скопировать все значения, возвращаемые test() в ваш новый список outer, который является накладным, а также у вас есть две копии того же списка.

0

Вы можете использовать любой ОПЦИИ, ни один из них не является предпочтительным. Что действительно предпочтительнее, это классы, свойства, объекты, нестатические методы

public class Test { 

    List<Double> inner = new ArrayList<>(); 

    public Test(){ 
     init(); 
    } 

    public static void main(String a[]) { 
     //OPTION 3 
     new Test().execute(); 
    } 

    public void execute() { 
     for (Double entry: inner) 
      System.out.println("entry = " + entry);        
    } 

    public void init() { 
     inner.add(123.0); 
     inner.add(234.0); 
    } 
} 
Смежные вопросы