web-dev-qa-db-fra.com

"Instanciation" d'une liste en Java?

Essayer d'utiliser le code suivant:

List<Integer> list = new List<Integer>();

Je reçois le message d'erreur suivant:

Java.util.List est abstrait; ne peut pas être instancié

Qu'est-ce que cela signifie et pourquoi ne puis-je pas initialiser un List de la même manière que je le ferais avec un ArrayList?

120
hello253

En Java, List est un interface. Autrement dit, il ne peut pas être instancié directement.

Au lieu de cela, vous pouvez utiliser ArrayList, qui est une implémentation de cette interface qui utilise un tableau comme magasin de sauvegarde (d'où son nom).

Puisque ArrayListest une sorte de List, vous pouvez facilement le convertir en amont:

List<T> mylist = new ArrayList<T>();

Cela contraste avec .NET, où, depuis la version 2.0, List<T> est l'implémentation par défaut de l'interface IList<T>.

170
Etienne de Martel

List est une interface, pas une classe concrète.
Une interface est simplement un ensemble de fonctions qu'une classe peut implémenter. cela n'a aucun sens d'instancier une interface.

ArrayList est une classe concrète qui implémente cette interface et toutes les méthodes qu'elle contient.

28
SLaks

Utiliser List<Integer> list = new ArrayList<Integer>();

25
Eng.Fouad

List est l'interface, pas une classe, elle ne peut donc pas être instanciée. ArrayList est probablement ce que vous cherchez:

ArrayList<Integer> list = new ArrayList<Integer>();

Une interface dans Java définit essentiellement un plan pour la classe - une classe implémentant une interface doit fournir les implémentations des méthodes définies par la liste. Mais l'implémentation réelle dépend entièrement de la classe d'implémentation, ArrayList dans ce cas.

Le JDK fournit également LinkedList - une autre implémentation conforme à l'interface de liste. Cela fonctionne très différemment de la ArrayList ci-dessous et, en tant que tel, il a tendance à être plus efficace pour ajouter/supprimer des éléments à mi-chemin de la liste, mais pour la grande majorité des cas d'utilisation, il est moins efficace. Et bien sûr, si vous voulez définir votre propre implémentation, c'est tout à fait possible!

En bref, vous ne pouvez pas créer de liste car il s’agit d’une interface ne contenant pas de code concret - c’est le travail des classes qui implémentent cette liste, dont ArrayList est de loin le plus utilisé (et avec raison!)

Il est également intéressant de noter qu'en C # une List est une classe, pas une interface - c'est IList. Le même principe s'applique cependant, mais avec des noms différents.

11
Michael Berry

Une List n'est pas une chose réelle en Java. C'est une interface, un moyen de définir comment un objet est autorisé à interagir avec d'autres objets. En tant que tel, il ne peut jamais être instancié. Un ArrayList est une implémentation de l'interface List, tout comme une liste chaînée, etc. Utilisez ceux-là à la place.

4
Doug

Une List dans Java est une interface qui définit certaines qualités qu'une "liste" doit avoir. Des implémentations de listes spécifiques, telles que ArrayList implémentent cette interface et précisent le fonctionnement des différentes méthodes. Qu'essayez-vous d'accomplir avec cette liste? Très probablement, l'une des listes intégrées fonctionnera pour vous.

3