2013-02-15 7 views
109

Recentemente ho usato ArrayList nel mio progetto Android in ufficio e sono un po 'confuso tra List e ArrayList, qual è la differenza tra i due e cosa dovrei usare?Qual è la differenza tra List e ArrayList?

Inoltre ho visto alcune implementazioni di esso come.

List<SomeObject> myList = new ArrayList<SomeObject>(); 

ArrayList<SomeObject> myList = new ArrayList<SomeObject>(); 

Qual è la differenza tra queste due istanze?

+6

Possibile duplicato di [Tipo elenco vs tipo ArrayList in Java] (http://stackoverflow.com/questions/2279030/type-list-vs-type-arraylist-in-java), [Java List vs ArrayList] (http://stackoverflow.com/questions/9309093/java-list-vs-arraylist) e [List vs ArrayList] (http://stackoverflow.com/questions/7726361/list-vs-arraylist); inoltre, [Lista vs. ArrayList] (http://www.coderanch.com/t/379305/java/java/List-ArrayList) e [molto altro] (https://www.google.com/search?hl=it&q=java+ lista + vs + arraylist)! – Eric

+3

http://stackoverflow.com/questions/6867484/what-is-a-list-vs-an-arraylist?rq=1 –

+3

Uno è un'interfaccia e l'altro è una classe. Ora puoi scoprirlo da solo. –

risposta

130

Non c'è differenza tra le implementazioni di elenchi in entrambi gli esempi. Esiste tuttavia una differenza in un modo in cui è possibile utilizzare ulteriormente myList variabile nel codice.

Quando si definisce la vostra lista come:

List myList = new ArrayList(); 

si può solo chiamare i metodi ed i membri di riferimento che sono definiti nell'interfaccia List. Se si definisce come:

ArrayList myList = new ArrayList(); 

sarete in grado di richiamare i metodi ArrayList-specifici e utilizzare i membri ArrayList-specifici in aggiunta a quelli le cui definizioni sono ereditate dalla lista.

Tuttavia, quando si chiama un metodo di un'interfaccia Elenco nel primo esempio, implementato in ArrayList, verrà chiamato il metodo da ArrayList (poiché l'interfaccia Elenco non implementa alcun metodo).

Questo si chiama polimorfismo. Puoi leggere su di esso.

+166

L'elenco non è una classe, è un'interfaccia. Non ha alcun metodo implementato. Quindi, se si chiama un metodo su un riferimento a Elenco, in effetti si chiama il metodo di ArrayList in entrambi i casi. – robonerd

+3

C'è una differenza, come @robonerd spiegato sopra. List è un'interfaccia, puoi digitare variabili non solo con classi o tipi primitivi, ma anche con interfacce. – emaringolo

+4

Ragazzi, per favore leggete attentamente il mio post. Non mescolare la definizione con l'implementazione. In entrambi i casi l'implementazione è la stessa: ArrayList. La variabile è definita in modo diverso. Non sei sicuro di cosa stai cercando di cambiare nella mia risposta. – ATrubka

Problemi correlati