2016-01-22 3 views
0

Я разрабатываю некоторые методы здесь, некоторые из них должны иметь список в качестве параметра.Список или массивы параметров методов?

Я хочу знать, подходит ли это для использования списка < T> или используйте массив [].

Например:

void method_name(List<String> arg) 
void method_name(String arg[]) 

Какой рекомендуемый вариант?

Может кто-нибудь мне помочь?

+0

Есть ли причина, по которой не оба? –

+0

Если вам нужен список в качестве параметров, то идите на него, трудно сказать, что использовать, не зная фактического метода. – LordAnomander

+0

Мое сомнение началось после того, как я заметил, что Google использует массив по большей части (фактически, я думаю, это для всех) его [Android API] (http://developer.android.com/reference/packages.html). Может быть, у них есть причина для этого, может быть, это правильный выбор. –

ответ

1

Помните, что List<T> является интерфейсом . Таким образом, передача списка в качестве аргумента делает ваш код более гибким, поскольку он не зависит от конкретной реализации List.

Так метод, который принимает List<String> в качестве параметра на самом деле может принять ArrayList<String> или LinkedList<String> или любую другую реализацию интерфейса List. Поэтому он может даже принять параметр типа MyList<String>, если класс MyList заявляет, что он реализует интерфейс List. Преимущество этого в том, что если вы хотите перейти от использования ArrayList к LinkedList в другом месте вашего кода, этот метод все равно будет работать.

В отличие от этого метод, который принимает String[], может принимать только String[]. Таким образом, у вас больше не будет возможности изменить способ хранения этих строк в другом месте вашего кода, не изменяя этот метод.

С точки зрения того, почему Google может использовать массивы в качестве параметров в своих API-интерфейсах, я думаю, что это действительно сводится к тому, что они используют их для.

Поэтому я не могу порекомендовать тот или иной. Это действительно зависит от того, что делает этот метод и что вы хотите делать с коллекцией. Для обзора ключевых различий между современными структурами программирования, такими как списки, и хорошими старомодными массивами, посмотрите на this answer.

1

Существует не рекомендованная или стандартная опция. Списки и массивы не являются одинаковыми типами объектов. Оба используются на Java. Вы можете сделать одно или оба (перегрузка по типу).

0

Имейте в виду, что существует третий вариант доступен именно

void method(String... params) 

I можно получить как массив, однако размер является гибким, и вы не должны поместить все в массив перед вызовом метода, но пропустите все ваши String s.

method(string1, string2, string3); 
+1

Но имейте в виду, что вы не можете передать это второму методу с параметром varargs. 'void method2 (String ... params) { // params [0] будет массивом строк // params [1] предоставит вам OutOfBoundsException } void method1 (String ...params) { // params [0] будет «первым» // params [1] будет «вторым» method2 (params); } метод1 («первый», «второй»); – lschuetze

0

Я думаю, что более популярным является параметр массива. void method_name (String arg []) вы можете получить любой элемент из массива и понять, сколько элементов в массиве.

0

Я думаю, вы должны использовать список . он медленнее, но он предлагает большую гибкость, и его проще в использовании, особенно если вы собираетесь изменить его размер.

0

Если список параметров фиксирован просто использовать столько параметров, сколько вам нужно

method(String parameter1, String parameter2) 

Я считаю, используя Array s громоздко. Есть несколько недостатков:

  • Нет дженерик см here
  • вы должны скопировать весь массив в новом большую, если вы хотите повысить его
  • и больше, в зависимости от того, что вы хотите сделать

Особенно, если вы хотите использовать List s в своем коде, вы должны копировать свое содержимое постоянно. Поэтому я бы сказал, чтобы пойти с List.

method(List<String> parameterList) 

Указан другой способ с использованием списков переменных параметров (varargs). Однако имейте в виду, что вы не можете передать параметр vararg просто в другой метод, используя varargs, поскольку параметр vararg представлен как массив и будет передан как таковой.

method1("first", "second"); 

void method1(String... params) { 
    //params[0] will be "first" 
    //params[1] will be "second" 
    method2(params); 
} 

void method2(String... params) { 
    //params[0] will be an array of Strings 
    //params[1] will give you an OutOfBoundsException 
} 
0

Это полностью зависит от того, как вы собираетесь использовать эти объекты.

Список Используется при

1) Вы собираетесь выполнять сортировку, поиск т.д., но не хочу писать много строк кода

2) Если размер элементов может увеличиться из-за Списки изменяются по размеру.

Используйте Array, если ваше требование не такое, как указано выше.

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