2016-01-22 79 views
0

我在這裏開發一些方法,其中一些需要有一個列表作爲參數。我想知道是否使用列表< T>或使用數組[]。列表或數組的方法參數?

例如:

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

哪一個是推薦的選項?

有人可以幫助我嗎?

+0

有沒有兩個原因? –

+0

如果你需要一個列表作爲參數,那就去做吧,如果不知道實際的方法,很難說出要使用什麼。 – LordAnomander

+0

我注意到Google在其大部分(實際上我認爲應該是所有的)[Android APIs](http://developer.android.com/reference/packages.html)使用數組之後就開始懷疑了。也許他們有這個理由,也許這是正確的選擇。 –

回答

1

請記住,List<T>是一個接口。因此,將List作爲參數傳遞將使您的代碼更加靈活,因爲它不依賴於List的特定實現。

所以採用一個List<String>作爲參數的方法實際上可以採取ArrayList<String>LinkedList<String>或任何其他實施List接口。所以它甚至可以採用類型爲MyList<String>的參數,只要類MyList聲明它實現List接口。這樣做的好處是,如果您想從代碼中的其他位置將ArrayList更改爲LinkedList,則此方法仍然有效。

相反,採用String[]的方法只能採用String[]。所以你將不再有能夠改變你在代碼中的其他地方存儲這些字符串的好處,而不必改變方法。

關於爲什麼谷歌可能會在他們的API中使用數組作爲參數,我認爲這真的歸結爲他們正在使用它們的內容

所以我不能真正推薦一個或另一個。這真的取決於該方法的作用以及您想要對該集合執行什麼操作。有關現代編程結構(如列表)和良好的老式陣列之間主要區別的概述,請參閱this answer

1

沒有推薦或標準選項。列表和數組根本不是相同的對象類型。兩者都用於整個Java。您可以執行其中一種或兩種(按類型重載)。

0

請記住,有可用的第三種選擇,即

void method(String... params) 

我可以像一個數組,但是規模是靈活的訪問,你不必把所有的東西放到一個數組的方法調用之前,但簡單通過所有String s。

method(string1, string2, string3); 
+1

但請注意,您無法通過varargs參數將其傳遞給第二種方法。 'void method2(String ... params)//參數[0]將是一個字符串數組 // params [1]會給你一個OutOfBoundsException } void method1(String ...params){ // params [0]將是「first」 // params [1]將是「second」 method2(params); } method1(「first」,「second」);' – lschuetze

0

我認爲比較流行的是數組參數。 void method_name(String arg []) 您可以從數組中獲取任何元素並瞭解數組中的元素數量。

0

我認爲你應該使用列表。它比較慢,但它提供了更多的靈活性,使用起來更容易,特別是如果您要調整它們的大小。

0

,因爲你需要

method(String parameter1, String parameter2) 

我發現使用Array s是繁瑣如果你的參數列表固定只使用盡可能多的參數。有幾個缺點:

  • 沒有仿製藥,見here
  • 您必須將整個陣列複製到一個新的更大的一個,如果你想增強它
  • ,更取決於你想要做
  • 什麼

特別是當您想在代碼中使用List時,您必須始終複製您的內容。所以我會說去用List

method(List<String> parameterList) 

提到了另一種使用可變參數列表(可變參數)的方法。但是,請注意,無法將vararg參數簡單地傳遞到另一個使用可變參數的方法,因爲參數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。