Java - Les fondamentaux : cours et exercices.

Collections.

  • Une collection représente un groupe d'objets, connu par ses éléments.

  • Certaines collections acceptent les doublons, d'autres pas.

  • Certaines sont ordonnées, d'autres pas.

  • Certaines collections émettent quelques restrictions, comme le type ou l'interdiction de la valeur null.

    --

On trouve : ArrayList, HashSet, HashMap ou LinkedList, ...

Les tableaux ...

Un tableau est une liste d'éléments. Ce n'est pas une collection en soi, car un tableau n'implémente pas l'interface Collection.

int [] monTableau = new int[20] ; // création d'un tableau de 20 entiers

monTableau[0]=15 ; // insertion au premier index de l'entier 15

System.out.println("Mon entier vaut : " + monTableau[0]) ; // affichage

List :

  • Une liste est une collection ordonnée.

  • L'utilisateur de celle-ci a un contrôle complet sur les éléments qu'il insère dedans, et il peut y accéder par l'entier de leur index.

  • Les listes ont toujours comme premier élément 0.

LinkedList

  • Une liste chaînée est une liste dont chaque élément est relié au suivant par une référence à ce dernier.

  • Une liste chaînée peut être utilisée dans le cadre d'une simulation de pile ou de file, FIFO(First In First Out) ou FILO(First In Last Out).

  • La taille d'une LinkedList n'est pas fixe : on peut ajouter et enlever des éléments selon nos besoins.

  • Nous pouvons aussi remarquer que les LinkedList acceptent tous types d'objets.

  • LinkedList n'est pas Thread Safe.

    --

List maListe=new LinkedList() ; // on crée notre liste chaînée

maListe.add(new Integer(1)) ; // on ajoute l'entier 1 à la liste

maListe.add(new Float(2.15)) ; // on ajoute le flottant 2.15 à la liste

/* On remarque ici que l'entier 1 est la tête de la liste, et que le flottant

* est la queue de la liste. */

Integer monEntier=(Integer)maListe.getFirst() ; // on n'oublie pas de faire le cast

Float monFloat=(Float)maListe.getLast(); // on n'oublie pas de faire le cast

maListe.remove(0) ; // on retire l'entier , le flottant devient la tete

Méthode

Les opérations principales sur une liste chaînée sont :

  • add(Object o) : ajoute un objet o en fin de liste

  • addFirst(Object o) : ajoute un objet o en début de liste

  • addLast(Object o) : ajoute un objet o en fin de liste

  • clear() : vide la liste

  • contains(Object o) : renvoie true si la liste contient l'objet o, false sinon.

    La redéfinition de la fonction hashCode() expliquée dans la partie sur les Map est ici importante.

    Si vous utilisez la fonction hashCode() définie dans object, contains(Object o) vous renverra true si l'objet référencé est présent dans la liste, et non pas si il y-a un objet exactement égal à o.

  • getFirst() et getLast() : renvoie le premier et le dernier élément de la liste sous forme d'Object. Ne pas oublier le cast.

  • removeFirst() et removeLast() : retire le premier et le dernier élément de la liste.

  • size() : renvoie la taille de la liste

ArrayList :

  • Un ArrayList est un tableau qui se redimensionne automatiquement.

  • Il accepte tout type d'objets, null y compris.

  • Chaque instance d'ArrayList a une capacité, qui définit le nombre d'éléments qu'on peut y stocker.

  • Au fur et à mesure qu'on ajoute des éléments et qu'on " dépasse " la capacité, la taille augmente en conséquence.

    --

List monArrayList = new ArrayList(10) ; // on crée un ArrayList de taille 10

for(int i = 0; i < 30 ; i++) {

  monArrayList.add(new Integer(i)); // on ajoute 30 entiers

}

/* On remarque que le ArrayList , au moment d'ajouter 10, atteint sa capacité maximale, il se redimensionne pour en accepter plus */

Méthode

Les opérations principales sur un ArrayList sont :

  • add(Object o) : ajoute l'objet o à la fin du ArrayList

  • clear() : vide le ArrayList

  • get(int index) : renvoie l'Object à l'index spécifié. Renvoie une exception si vous dépassez le tableau (IndexOutOfBoundsException)

  • size() : renvoie la taille du ArrayList

Attention
  • Les opérations d'accès à un objet (get), de récupération de la taille (size), d'iteration (iterator) et d'itération spéciale (listIterator) sont exécutées en temps constant, c'est à dire que quel que soit le ArrayList, ces opérations prendront le même temps.

  • L'opération d'ajout quant à elle est en temps amorti, c'est à dire que les ajouts en fin et début de liste sont plus rapides.

    Cependant, il faut mettre en avant la faiblesse d'ArrayList qui est que le fait de redimensionner demande beaucoup de ressources.

    Il est donc nécessaire de minimiser ces redimensionnements, notamment en définissant une taille de base assez large lors de sa construction.

Map :

  • Une map est une collection qui associe une clé à une valeur.

  • La clé est unique, contrairement à la valeur qui peut être associée à plusieurs clés.

  • La majorité des collections de type Map ont deux constructeurs : un constructeur sans paramètre créant une Map vide, et un constructeur prenant en paramètre une Map qui crée une nouvelle Map en fonction de la Map passée en paramètre.

HashTable :

  • Un HashTable est une implémentation de Map qui associe une clé à une valeur.

  • N'importe quel objet, mis à part null peut y être ajouté.

  • Voici un exemple d'utilisation de HashTable, où on associe un numéro de mois à son nom :

Exemple

Map monHashtable = new Hashtable() ;

monHashtable.put(new Integer(1),"Janvier");

monHashtable.put(new Integer(2),"Fevrier");

monHashtable.put(new Integer(3),"Mars");

monHashtable.put(new Integer(4),"Avril");

monHashtable.put(new Integer(5),"Mai");

monHashtable.put(new Integer(6),"Juin");

monHashtable.put(new Integer(7),"Juillet");

monHashtable.put(new Integer(8),"Aout");

monHashtable.put(new Integer(9),"Septembre");

monHashtable.put(new Integer(10),"Octobre");

monHashtable.put(new Integer(11),"Novembre");

monHashtable.put(new Integer(12),"Décembre");

HashMap :
  • Un HashMap est une collection similaire au HashTable.

  • Seules deux choses les diffèrent : HashMap accepte comme clé et comme valeur null, et HashMap n'est pas Thread Safe.

PrécédentPrécédentSuivantSuivant
AccueilAccueilImprimerImprimerRéalisé avec Scenari (nouvelle fenêtre)