2012-01-09 1 views
-1

En ce qui concerne:niveau noob collection générique en Java

List<String> mystring = new ArrayList<String>(); 

me corriger si Im mal:

List est un Collection, et pourrait aussi être Set, Queue ou Map aussi.

String est un type.

mystring est le nom de cette variable et sera une collection générique d'objets String.

ArrayList est un? et pourrait aussi être?

Si je parle avec un autre développeur, qu'est-ce que j'appelle la chose ArrayList? ArrayList est une implémentation de l'interface List.

Répondre

2

La liste est une interface. ArrayList est une implémentation de List (comme LinkedList).

1
  1. ArrayList est une implémentation de l'interface List.
  2. ArrayList est une classe concrète de la variable mystring (mais dans ce contexte, il devrait être insignifiant que mystring est de type liste)
1

ArrayList<String> est le type concret de la (mal nommée) variables mystring.

1
  1. List est une interface. Un ArrayList est une classe concrète qui implémente cette interface.
  2. Une liste ne peut pas être Set, Queue, Map ou autre chose qu'un List.
  3. String est un Object.
  4. List<String> mystring = new ArrayList<String>(); implique que myString est une collection (dans ce cas, une liste) de String instances.
+1

J'aime cette réponse, c'est clair et précis, bien que je pense que vous devriez expliquer que 'Set',' Queue' et 'Map' sont eux-mêmes des interfaces qui ne s'étendent pas de' List'. Aussi le point quatre que je sens nécessite d'être développé pour dire 'mystring' est un (de type)' Collection' car 'Collection' est la super interface de' List' dans ce cas ce sera un 'List' d'objets' String' –

1

La liste est une interface. Cela donne un comportement à l'objet. L'ArrayList dans ce cas est l'implémentation. Mais cela pourrait aussi être n'importe quel autre objet qui implémente l'interface de liste. Le vecteur est un autre exemple.

Dans ce cas, Vector fonctionne à peu près comme ArrayList mais est synchronisé. Si vous avez besoin d'une concurrence, vous allez probablement utiliser un vecteur, mais il a un prix. C'est un peu plus lent que ArrayList.

Si vous travaillez dans Java Mobile, vous verrez que vous n'avez que Vector et aucune ArrayList. ArrayList peut être une collection pour tout ce que vous voulez, mais vous définissez le type dans votre déclaration, donc il va s'attendre à ce type lorsque vous récupérez les objets de la liste. Si vous avez besoin d'autre chose, vous devrez faire du casting.

+0

Donc [interface] <[type]> [nom] = nouveau [implémentation de l'interface] <[type]>(); – jason

+0

Exactement! Vous n'êtes pas obligé d'utiliser une interface dans la déclaration, mais ses meilleures pratiques pour utiliser la première interface qui couvre vos besoins. Par exemple, si Collection a les méthodes dont vous avez besoin, n'utilisez même pas List. Vous pouvez également utiliser ArrayList directement, mais dans le futur, si vous avez besoin de changer votre application, cela sera plus difficile car vous devez mettre à jour toutes les références. – sfratini

1

Si vous parlez à un autre développeur de cette ligne de code spécifique, et que votre sujet de discussion concerne une collection ordonnée d'éléments, vous devriez probablement l'appeler Liste.De cette façon, vous pouvez accéder à tout le comportement spécifique de List caractérisé par l'objet mystring.

Vous pouvez interagir avec lui comme vous le feriez avec n'importe quelle collection (c'est-à-dire, liste, file d'attente, ensemble). Alors vous pouvez seulement accéder au comportement de dénominateur commun parmi tous ces types. En passant, une collection ou plus précisément une liste ne peut pas être une carte.

Questions connexes