Vous êtes ici :
Accueil Cours Programmations La Programmation Orientée Objet en Java Les collections

La Programmation Orientée Objet en Java : Les collections

Avant Java 2, Java a fourni des classes ad hoc telles que Dictionary, Vector, Stack et Properties pour stocker et manipuler des groupes d'objets. Bien que ces classes aient été très utiles, ils manquaient d'un thème central et unificateur. Ainsi, la façon dont vous avez utilisé Vector était différente de la façon dont vous avez utilisé les Properties.

Les collections ont été conçues pour atteindre plusieurs objectifs.

  • Le cadre devait être performant. Les implémentations pour les collections fondamentales (tableaux dynamiques, listes liées, arbres et hashtables) sont très efficaces.
  • Le cadre devait permettre aux différents types de collections de fonctionner de manière similaire et avec un haut degré d'interopérabilité.
  • L'extension et/ou l'adaptation d'une collection devaient être faciles.

Dans ce but, l'ensemble du cadre de collections est conçu autour d'un ensemble d'interfaces standard. Plusieurs implémentations standard telles que LinkedList, HashSet et TreeSet, de ces interfaces sont fournies que vous pouvez utiliser tel quel et que vous pouvez également implémenter votre propre collection, si vous choisissez.

Un cadre de collections est une architecture unifiée pour représenter et manipuler des collections. Tous les frameworks de collections contiennent les éléments suivants:

  • Interfaces: il s'agit de types de données abstraites qui représentent des collections. Les interfaces permettent de manipuler les collections indépendamment des détails de leur représentation. Dans les langages orientés objet, les interfaces forment généralement une hiérarchie.
  • Les implémentations, c'est-à-dire les classes: ce sont les implémentations concrètes des interfaces de collection. Essentiellement, ce sont des structures de données réutilisables.
  • Algorithmes: ce sont les méthodes qui effectuent des calculs utiles, tels que la recherche et le tri, sur des objets implémentant des interfaces de collection. On dit que les algorithmes sont polymorphes: c'est-à-dire que la même méthode peut être utilisée sur plusieurs implémentations différentes de l'interface de collection appropriée.

En plus des collections, le cadre définit plusieurs interfaces et classes de mappage. Ce mappage stocke des paires de clés/valeurs. Bien que les mappages ne soient pas des collections dans l'utilisation correcte du terme, mais elles sont entièrement intégrées aux collections.

Interfaces de collection

Les collections définissent plusieurs interfaces. Cette section fournit un aperçu de chaque interface:

SN

Interfaces avec description

1

Collection
Cela vous permet de travailler avec des groupes d'objets; Il est au sommet de la hiérarchie des collections.

2

List 
Ceci étend la Collection et une instance de List stocke une collection ordonnée d'éléments.

3

Set
Cela étend la Collection pour gérer les ensembles, qui doivent contenir des éléments uniques

4

SortedSet 
Cela étend Set pour gérer les ensembles triés

5

Map 
Cela correspond à des clés uniques aux valeurs.

6

Map.Entry 
Ceci décrit un élément (une paire clé / valeur) dans une carte. C'est une classe interne de Map.

7

SortedMap 
Ceci étend la Map afin que les clés soient maintenues dans un ordre croissant.

8

Enumeration 
Il s'agit d'une interface héritée et définit les méthodes par lesquelles vous pouvez énumérer (obtenir un à la fois) les éléments d'une collection d'objets. Cette interface ancienne a été remplacée par Iterator.

Les classes de collection

Java fournit un ensemble de classes de collection standard qui implémentent des interfaces de collection. Certaines des classes fournissent des implémentations complètes qui peuvent être utilisées tel quel et d'autres sont des classes abstraites, fournissant des implémentations squelettiques qui sont utilisées comme points de départ pour créer des collections concrètes.

Les classes de collection standard sont résumées dans le tableau suivant:

SN

Classes avec description

1

AbstractCollection 
Implémente la plupart de l'interface Collection.

2

AbstractList 
Hérite de la classe AbstractCollection et implémente la plupart de l'interface de List.

3

AbstractSequentialList 
Hérite de la classe AbstractList  pour une collection utilisant un accès séquentiel plutôt que aléatoire de ses éléments.

4

LinkedList 
Implémente une liste liée en héritant AbstraSequentialList.

5

ArrayList 
Implémente un tableau dynamique en héritant AbstractList.

6

AbstractSet 
Hérite de la classe AbstractCollection et implémente la plupart de l'interface Set.

7

HashSet 
Hérite de la classe AbstractSet pour une utilisation avec une table de hachage.

8

LinkedHashSet 
Extension de HashSet pour permettre des itérations d'ordre d'insertion.

9

TreeSet 
Implémente un ensemble stocké dans un arbre. Hérite de la classe AbstractSet.

dix

AbstractMap 
Implémente la plupart de l'interface Map.

11

HashMap 
Extension de la classe AbstractMap pour utiliser une table de hachage.

12

TreeMap 
Extension de la classe AbstractMap pour utiliser un arbre.

13

WeakHashMap 
Hérite de la classe AbstractMap pour utiliser une table de hash avec des clés faibles.

14

LinkedHashMap 
Extension de HashMap pour permettre des itérations d'ordre d'insertion.

15

IdentityHashMap 
Extension  AbstractMap et utilise l'égalité de référence lors de la comparaison de documents.

Les classes AbstractCollection, AbstractSetAbstractListAbstractSequentialList et AbstractMap fournissent des implémentations squelettiques des interfaces de collection de noyau, afin de minimiser les efforts nécessaires à leur mise en œuvre.

Les classes héritées suivantes définies par java.util ont été discutées dans le chapitre précédent:

SN

Classes avec description

1

Vector 
Cela implémente un tableau dynamique. C'est similaire à ArrayList, mais avec des différences.

2

Stack 
Stack est une sous-classe de Vector qui implémente une pile standard de dernière entrée première sortie.

3

Dictionary
Le Dictionary est une classe abstraite qui représente un référentiel de stockage clé / valeur et fonctionne comme Map.

4

Hashtable 
Hashtable faisait partie de l'original java.util et est une implémentation concrète d'un Dictionary.

5

Properties 
Properties  est une sous-classe de Hashtable. Il est utilisé pour maintenir les listes de valeurs dans lesquelles la clé est une chaîne et la valeur est également une chaîne.

6

BitSet 
Une classe BitSet crée un type spécial de tableau qui contient des valeurs de bits. Ce tableau peut augmenter en taille au besoin.

Algorithmes de collection

Le cadre de collections définit plusieurs algorithmes pouvant être appliqués aux collections et aux Maps. Ces algorithmes sont définis comme des méthodes statiques dans la classe Collections.

Plusieurs des méthodes peuvent lancer une ClassCastException, qui se produit lorsqu'une tentative est faite pour comparer des types incompatibles, ou UnsupportedOperationException, qui se produit lorsqu'une tentative est faite pour modifier une collection non modifiable.

Les collections définissent trois variables statiques: EMPTY_SET, EMPTY_LIST et EMPTY_MAP. Tous sont immuables.

Comment utiliser un Iterator?

Souvent, vous voudrez parcourir les éléments d'une collection. Par exemple, vous pouvez afficher chaque élément.

La façon la plus simple de le faire est d'utiliser un itérateur, qui est un objet qui implémente l'interface Iterator ou ListIterator.

Iterator vous permet de parcourir une collection, d'obtenir ou de supprimer des éléments. ListIterator étend Iterator pour permettre une traversée bidirectionnelle d'une liste et la modification des éléments.

Comment utiliser un Comparator ?

TreeSet et TreeMap stockent les éléments en ordre trié. Cependant, c'est le comparateur qui définit précisément ce que signifie l’ordre trié.

Cette interface nous permet de trier une collection donnée de différentes façons. De plus, cette interface peut être utilisée pour trier toutes les instances de toute classe (même les classes que nous ne pouvons pas modifier).

Résumé

Le cadre de collections Java donne au programmeur l'accès aux structures de données préemballées ainsi qu'aux algorithmes de manipulation.

Une collection est un objet qui peut contenir des références à d'autres objets. Les interfaces de collection déclarent les opérations qui peuvent être effectuées sur chaque type de collection.

Les classes et les interfaces du cadre de collections sont dans le paquetage java.util.




Vous êtes ici :
Accueil Cours Programmations La Programmation Orientée Objet en Java Les collections