2013-02-15 4 views
109

Я недавно использовал ArrayList в своем проекте Android в офисе, и я немного запутался между List и ArrayList, в чем разница между ними и что я должен использовать?В чем разница между List и ArrayList?

Также я видел некоторые его реализации.

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

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

В чем разница между этими двумя экземплярами?

+6

Возможный дубликат: [Список типов и тип ArrayList в 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) и [List vs ArrayList] (http://stackoverflow.com/questions/7726361/list-vs-arraylist); также, [Список Vs. ArrayList] (http://www.coderanch.com/t/379305/java/java/List-ArrayList) и [гораздо больше] (https://www.google.com/search?hl=ru&q=java+ список + против + ArrayList)! – Eric

+3

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

+3

Один из них - это интерфейс, а другой - класс. Теперь вы можете найти это самостоятельно. –

ответ

130

Нет никакой разницы между реализациями списков в обоих примерах. Однако существует разница в том, как вы можете использовать переменную myList в своем коде.

При определении списка, как:

List myList = new ArrayList(); 

вы можете только вызывать методы и эталонные элементы, которые определены в интерфейсе List. Если определить его как:

ArrayList myList = new ArrayList(); 

вы будете иметь возможность ссылаться на ArrayList-специфические методы и использовать ArrayList-специфические элементы в дополнение к тем, чьи определения наследуются из списка.

Тем не менее, когда вы вызываете метод интерфейса List в первом примере, который был реализован в ArrayList, будет вызван метод из ArrayList (поскольку интерфейс List не реализует никаких методов).

Это называется полиморфизм. Вы можете прочитать об этом.

+166

Список не класс, это интерфейс. В нем нет каких-либо методов. Поэтому, если вы вызываете метод в ссылке List, вы фактически вызываете метод ArrayList в обоих случаях. – robonerd

+3

Существует разница, как объяснил @robonerd выше. Список - это интерфейс, вы можете вводить переменные не только с классами или примитивными типами, но и с интерфейсами. – emaringolo

+4

Ребята, пожалуйста, внимательно прочитайте мое сообщение. Не смешивайте определение с реализацией. В обоих случаях реализация такая же: ArrayList. Переменная определяется по-разному. Не уверен, что вы пытаетесь изменить в своем ответе. – ATrubka