2011-01-04 2 views

Répondre

10

Aucune, du point de vue de la création. Les deux créent une instance de ArrayList.

La différence est que, en vous deuxième exemple, al permet d'accéder à toutes les méthodes mises en œuvre sur le tout d'interface List, dans le premier exemple, al permet d'accéder à toutes les méthodes et les champs (accessibles) de la classe ArrayList.

Une règle pratique: utilisez le second modèle. Si vous avez besoin de quelques goodies supplémentaires de la mise en œuvre ArrayList, vous pouvez toujours jeter:

List list = new ArrayList(); 
// do some adds/removes/... on the list 
((ArrayList) list).trimToSize(); 
+0

Thnk u abdreas D mais 1 chose quelle est la règle générale? –

+0

@Hari kanna - Utilisez un type d'interface, si disponible, donc 'List' ou même' Collection'. C'est ce que je fais dans 99,5% des cas. –

7

Son appelé prog éperonnage à l'interface. Supposons que vous deviez renvoyer ce list à partir de votre méthode. Ainsi, le code appelant peut avoir cela dans une variable List.

public ArrayList getList() { 
    ArrayList list = new ArrayList(); 
    // do something with the list here 
    return list; 
} 

Et cela,

public List getList() { 
    List list = new ArrayList(); 
    // do something with the list here 
    return list; 
} 

Maintenant, pour cette dernière méthode code appelant peut avoir la liste retournée dans List variable de type. Et vous pouvez facilement décider plus tard, pour une raison quelconque, quelque chose comme ça,

public List getList() { 
    List list = new LinkedList(); 
    // do something with the list here 
    return list; 
} 

Pas de changement pour appeler le code, alors qu'avec l'ancien vous devez changer le type de retour, qui finirait par bousiller le code d'appel et .

+0

plz expliquer en détail –

+4

@Hari Kanna: Je faisais juste ça :). –

7

paraphrasant my answer-this very similar question à propos Map contre HashMap:

Il n'y a pas de différence entre les objets. Il y a une différence dans l'interface que vous avez à l'objet. Dans le premier cas, l'interface est ArrayList, alors que dans la seconde, elle est List. L'objet sous-jacent, cependant, est le même.

L'avantage d'utiliser List est que vous pouvez changer l'objet sous-jacent en un type de liste différent sans rompre votre contrat avec le code qui l'utilise. Si vous le déclarez comme ArrayList, vous devez modifier votre contrat si vous souhaitez modifier l'implémentation sous-jacente.

+0

Ah, et il s'avère qu'il y avait un doublon exact en utilisant 'List'. :-) –