CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Collections en java

Chweps
Chweps
Niveau 10
23 mai 2010 à 19:21:18

:salut:

J'aimerais savoir à quoi servent les collections en java? Quels genre de problème peuvent elles résoudre?
Quels sont les différents types de collections?
J'ai trouvé comme type de collections list, map et set mais je crois que ce ne sont des interfaces de collections c'est pas la même chose que les collections :question:

Si vous avez un lien qui explique clairement ça serait bien :svp:

Chweps
Chweps
Niveau 10
23 mai 2010 à 19:29:47

Au fait je sais pas aussi si la classe vector est une collection?

dnob700
dnob700
Niveau 10
23 mai 2010 à 20:32:28

Je répond un peu au hasard, je ne connais pas java.

Quand tu programme l'un des deux problèmes que tu dois résoure est de savoir comment stocker tes données de tel sorte qu'il soit simple et efficace de les manipuler dans le cadre d'un programme que tu écrit. Par exemple tu peut avoir besoin de stocker plein de valeur que tu vas récupérer dans un ordre quelconque, ou alors tu veux pouvoir récupérer seulement la première que tu as stocké, ou alors tu vas passer ton temps à chercher des valeurs dans ton ensemble de donné, mais tu vas rarement en ajouter de nouvelle.

Pour toutes ces situations, il y a des contraintes différentes (par exemple il faut que l'ajout d'une valeur soit très rapide, ou alors ce n'est pas un problème, il faut que la recherche ou la suppression soit rapide ou alors ce n'est pas un problème, etc.). Et toutes ces contraintes sont résolu par des structures de données différentes. Parmi ces structures, il y a, entre autre, les vecteurs, les listes, les listes doublement chaînées, les table de hachage, etc.

Tout ça, ce sont des structures de données. Si, en java, elles sont implémenté par une classe chacune, alors tu as des algorithmes (ajout ou suppression d'éléments, etc.) qui sont implémenté une fois pour chaque structure de données. Mais comme il y a des choses que toutes les structures savent faire (du genre regarder un par un chacun de leur élément), si tu écrit un algo qui n'utilise que ces fonctions communes à toutes les structures de données, tu ne veux pas avoir besoin de l'écrire pour chacune d'entre elle. Tu préfère l'écrire une seule fois de façon générique. Ça donne un code plus réutilisable. C'est Bien (TM).

C'est à ça que sert une "collection". J'imagine qu'une collection c'est une interface (c'est-à-dire une liste de fonctions) que les structures de données doivent posséder pour avoir le droit de s'appeler collection. Et quand c'est le cas, tu peux utiliser sur ces structures de données tout les algo qui peuvent fonctionner avec les collections.
Par exemple, s'il y a une fonction de tri sur les collections, tu peut l'utiliser sur les vecteur ou les listes. Mais mieux encore, si tu crée une nouvelle classe qui implémente l'interface collection (c'est-à-dire qu'elle a toutes les fonctions que doivent avoir les collections), alors tu peux directement utiliser cette fonction de tri dessus. C'est donc très intéressant pour toi car tu n'a pas besoin d'écrire une nouvelle fonction de tri.

Bon, tout ça n'est vrai que si une collection est effectivement une classe qui implémente une certaine interface et si tout ça se fait en java. À confirmer par ceux qui font du java.

Chweps
Chweps
Niveau 10
23 mai 2010 à 22:13:04

Oui j'ai fait des recherches et ça correspond (à part pour l'histoire de créer une fonction sois même qui implémente une collection je suis pas sûr qu'on puisse faire ça).

J'ai un petit souci pour répertorier les collections d'après javadoc il n'y a que 2 collections : AbstractList et AbstractSet.
:d) http://java.sun.com/j2se/1.4.2/docs/api/java/util/AbstractCollection.html

Pourtant j'ai entendu parler de collection map :
http://fmora.developpez.com/tutoriel/java/collections/introduction/#L4

Alors que javadoc considère ça comme une interface :doute:
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Map.html

XzZy
XzZy
Niveau 10
23 mai 2010 à 22:22:46

Map est un interface et les types de maps utilisables l'implémentent.
Comme HashMap par exemple.

Chweps
Chweps
Niveau 10
23 mai 2010 à 22:48:32

Donc ce n'est pas une collection pourtant j'ai lu dans plusieurs sites que c'était une collection, bizarre.

Je crois que c'est pas tout à fait une collection mais ça y ressemble beaucoup.
C'est une classe aussi : http://java.sun.com/j2se/1.4.2/docs/api/

Chweps
Chweps
Niveau 10
23 mai 2010 à 22:50:10

Mauvais lien : http://java.sun.com/j2se/1.4.2/docs/api/

dnob700
dnob700
Niveau 10
23 mai 2010 à 23:41:27

Une même classe peut implémenter plusieurs interface. Donc si Map en est une (d'interface) et que HashMap implémente l'interface Map, ça ne l'empêche pas d'implémenter _aussi_ l'interface collection. Peut-être même que l'interface Map est un sur ensemble de collection et donc toutes les classes qui implémentent Map implémente aussi collection.

"ça correspond (à part pour l'histoire de créer une fonction sois même qui implémente une collection je suis pas sûr qu'on puisse faire ça"

Ça ne serait pas une fonction, mais une classe. Et oui, je pense que c'est possible (sinon, tout ça n'aurait pas d'intérêt).

saleGauss
saleGauss
Niveau 9
24 mai 2010 à 14:55:48

Une collection sert à manipuler une collection d'objet de même type.
Chaque collection possède ses propriétés.
Tu as besoin d'accéder uniquement à l'élément de tete de ta collection, et de l'enlever ? Utilises une List.
Tu as besoin d'avoir de juste pouvoir tester l'appartenance d'un objet à la collection, et eventuelement le supprimer ? utilise un Set (ensemble)
Tu as besoin de gérer des objets identifiés par des clés (uniques) ? Utilise un Map<TypeClef,TypeObjet> qui associera un TypeClef pour chaque TypeObjet. Tu pourras rechercher un élement par sa clef. Et tu auras la garantie que tous les objets auront une clef différente (dans la politique du dernier arrivé, dernier qui reste).

Bref, il faut choisir une collection qui correspond à tes besoins.
Et il est très important de réutiliser les collections Java déjà écrites pour toi, qui t'évitent de perdre du temps, et de faire des erreurs.

Un détail concernant la différence Interface-Classe :
Set, List, Map sont des interfaces : des contrats qui te garantissent que telles et telles fonctionnalités seront présentes.

Une classe implémente une collection. Par exemple, un ArrayList implémentera l'interface List, et en interne, elle gerera un tableau.

IL est important de TYPER TES DONNEES AVEC DES INTERFACES, pour être le plus générique possible. Ainsi, si par la suite, pour des raisons de perfs (ou autre), tu décides de ne plus utiliser un ArrayList mais un HashList, tout ce qui a été déclaré en "List maCollecection" n'aura pas à être changé.

En gros :

class taClasse
{
List taListe; // typé avec l'interface

Classe() // Constructeur
{
taListe = new ArrayList; // En interne, je vais gerer avec ArrayList
}
}

Et le mot de la fin :
La hierarchie des collections Java est effectivement assez imposante.
Personne n'a besoin de tout. Recherches dans la doc Java quand tu te poses une question.
Et effectivement, des interfaces héritent de plusieurs interfaces, et des classes implémentent plusieurs interfaces.

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment