Tableau
Vector
Stack
Hashtable
TreeSet et Comparator
Autres classes
Le package java.util contient
beaucoup de structures de données que l'on peut aussi appeler collections.
Avant peut être de rentrer dans java.util, voyons déjà
comment on déclare et on utilise les tableaux.
Les
tableaux
Déclaration : int[ ] tab ou int tab[ ]. Java est
assez permissif de ce côté là, il permet plusieurs
notations. Cependant, mieux vaut utiliser la première qui est beaucoup
plus intuitive. Pour les tableaux à 2 dimensions : int[ ][ ]
tab.
Instanciation : tab = new int[dim]. Le tableau est indicé
de 0 à dim-1. Chaque élément du tableau est
initialisé à 0 pour les primitives, null pour
les Object et false pour les booléens.
La taille d'un tableau est fixe. Cependant, il n'est pas nécessaire
de connaître la taille du tableau à la compilation. Une allocation
dynamique peut très bien être faite.
Ecrire un programme qui met dans un tableau à deux dimensions la
table de multiplication et qui l'affiche à l'écran.
Les
vecteurs
La taille fixe des tableaux est un inconvénient mais ce choix a
été fait pour des raisons d'efficacité. D'autres
structures permettent cette gestion dynamique de la taille. Les
vecteurs (java.util.Vector) présentent deux avantages :
la taille dynamique et la possibilité d'y stocker des Object,
c'est à dire n'importe quoi. Alors que les éléments
d'un tableau devront tous être les mêmes, les éléments
d'un vecteur pourront être différents. Pour les primitives,
on utilisera les classes enveloppes (wrappers). Quelques méthodes
de la classe Vector :
void addElement(Object obj)
void clear()
boolean contains(Object elem)
Object elementAt(int index)
int indexOf(Object elem)
void insertElementAt(Object obj, int index)
Utilisez la classe Animal déjà implémentée
pour écrire un programme qui remplit un vecteur d'animaux et affiche
le contenu à l'écran. Que remarquez vous ?
Les
piles
Les piles (java.util.Stack) sont des structures qui permettent
de gérer le mode LIFO ou Last In First
Out. Les principales méthodes :
boolean empty()
Object peek()
Object pop()
Object push(Object item)
Ecrire un petit programme tout simple qui utilise une pile.
Les
Hashtables
Les Hashtables (java.util.Hashtable) implémente la classe
Map qui permet entre autres d'associer une clé à chaque
élément. Cette clé nous permet de pointer directement
sur l'élément associé. Quelques méthodes :
boolean contains(Object value)
Object get(Object key)
boolean isEmpty()
Object put(Object key, Object value)
Object remove(Object key)
int size()
Ecrire un programme qui utilise une Hashtable dans laquelle vous mettez
des Animaux. Indexez ces animaux par leur nom.
Les
TreeSet
Les TreeSet vont de pair avec les Comparateurs. Ils sont
assimilables à des Vector sauf que les éléments le
constituant sont classés. De même, les TreeMap sont
assimilables à des Hashtables. Le classement des différents
éléments est défini dans un comparateur (java.util.Comparator).
La classe Comparator est une interface. Il faut donc créer notre
propre comparateur qui implémente Comparator.
class Comparaison implements
Comparator {
int retval = 0;
public int compare(Object o1, Object o2) {
return (((Animal)o1).getName()).compareTo(((Animal)o2).getName());
}
}
Quelques méthodes :
boolean add(Object o)
void clear()
Iterator iterator()
int size()
Ecrire un programme qui utilise un TreeSet d'animaux classé par
ordre alphabétique de leur nom.
Les
autres classes
Il y a plein d'autres classes dans java.util, mais leur usage est un peu
plus ponctuel. La classe Calendar permet de gérer tout ce
qui peut toucher aux dates et aux calendrier. C'est une classe abstraite
dont la principale sous classe est GregorianCalendar, notre calendrier
gregorien. On trouve aussi des utilitaires comme StringTokenizer
qui sert à découper un texte en unité lexicale.
|