Page d'accueilFindIt !ContactLes classes de basesLa gestion des fichiers et des flux de données

La bibliothèque JavaTM 1.0

Table des matièresHierarchie des classes

CJava

 Les outils Java

Gestion de collections de données
Gestion des dates
Génération de nombres aléatoires
Autres classes d'outils

 

Gestion de collections de données

Le package java.util rassemble des classes d'utilitaires dont les plus intéressantes permettent de gérer les collections de données (classes Vector, Stack, Dictionary, Hashtable, BitSet et interface Enumeration).

L'interface java.util.Enumeration

Cette interface est implémentée par les classes désirant pouvoir faire une énumération des objets mémorisés par une autre classe, comme par exemple la classe Vector. Les méthodes de cette interface sont généralement utilisées dans une boucle while, comme dans l'exemple suivant (à recopier dans un fichier EssaiEnumeration.java que vous compilez avec l'instruction javac EssaiEnumeration.java pour ensuite l'exécuter avec java ou Java Runner, grâce à l'instruction java EssaiEnumeration) :

import java.util.*;
 
// Classe mémorisant des chaînes de caractères
class CollectionChaines
{
  String [ ] tabChaines;
  int        nbreChaines = 0;
 
  CollectionChaines (int max)
  {
    tabChaines = new String [max];
  }
 
  public void ajouterChaine (String chaine)
  {
    tabChaines [nbreChaines++] = chaine;
  }
 
  public Enumeration chaînes ()
  {
    return new EnumerationChaines (this);
  }
}
 
// Classe permettant d'énumérer les chaînes de CollectionChaines
class EnumerationChaines implements Enumeration
{
  CollectionChaines collection;
  int indice = 0;
 
  public EnumerationChaines (CollectionChaines collection)
  {
    this.collection = collection;
  }
 
  public boolean hasMoreElements ()
  {
    return indice < collection.nbreChaines;
  }
 
  public Object nextElement ()  
  {
    if (indice < collection.nbreChaines)
      return collection.tabChaines [indice++];
    else 
      throw new NoSuchElementException ();
  }
}
 
// Classe d'essai
public class EssaiEnumeration
{
  public static void main (String [ ] args)
  {
    // Création d'une collection de chaînes et ajout de 3 chaînes
    CollectionChaines donnees = new CollectionChaines (10);
    donnees.ajouterChaine ("Toto");
    donnees.ajouterChaine ("Titi");
    donnees.ajouterChaine ("Tutu");    
 
    // Enumération des éléments de la collection
    Enumeration enumeration = donnees.chaînes ();
    while (enumeration.hasMoreElements ())
      System.out.println (enumeration.nextElement ());
  }
}
Méthodes
public boolean hasMoreElements ()

Cette méthode doit renvoyer true s'il reste encore un ou plusieurs éléments à énumérer.

public Object nextElement () throws NoSuchElementException

Cette méthode doit retourner l'élément suivant à énumérer ou déclencher une exception de classe NoSuchElementException si le dernier élément a déjà été énuméré.

La classe java.util.Vector

Cette classe qui implémente l'interface Cloneable, permet de créer un vecteur. Ce type d'ensemble permet de mémoriser un ensemble d'objets de classe quelconque dans un tableau de taille variable (ces éléments peuvent être éventuellement égal à null). Comme pour les tableaux, l'accès aux éléments se fait par un indice. La classe Vector comporte de nombreuses méthodes qui permettent d'ajouter, d'insérer, de supprimer ou de rechercher des éléments. Toutes les méthodes de Vector sont final sauf clone ().

Champs
protected Object [ ] elementData
protected int elementCount
protected int capacityIncrement

Ces champs correspondent aux éléments mémorisés, au nombre d'éléments mémorisés et à l'incrément à appliquer au tableau elementData quand il est rempli. Ces classes étant protected ne sont accessibles que dans les classes dérivées de Vector.

Constructeurs
public Vector ()
public Vector (int initialCapacity)
public Vector (int initialCapacity, int capacityIncrement)

Ces constructeurs permettent de créer un vecteur de capacité initiale initialCapacity (égal à 10 par défaut) et d'incrément capacityIncrement (égal à 0 par défaut). Si l'incrément est nul, la taille du tableau mémorisant les éléments du vecteur sera doublée à chaque fois que ce tableau a besoin d'être agrandi.

Méthodes
public final synchronized void addElement (Object obj)

Ajoute l'élément obj en fin de vecteur. Si le tableau du vecteur est trop petit, il est automatiquement agrandi.

public final synchronized void insertElementAt (Object obj, int index)
                     throws IndexOutOfBoundsException

Insère l'élément obj à l'indice index. Si le tableau du vecteur est trop petit, il est automatiquement agrandi.

public final synchronized Object elementAt (int index)
                           throws IndexOutOfBoundsException
public final synchronized void setElementAt (Object obj, int index)
                           throws IndexOutOfBoundsException

Ces méthodes permettent d'interroger ou de modifier l'élément mémorisé à l'indice index. Si index est plus grand que le nombre d'éléments du vecteur, une exception IndexOutOfBoundsException est déclenchée.

public final synchronized boolean removeElement (Object obj)
public final synchronized void removeElementAt (int index)
                     throws IndexOutOfBoundsException
public final synchronized void removeAllElements ()

Ces méthodes permettent de retirer du vecteur, soit l'élément obj, soit l'élément mémorisé à l'indice index, soit tous les éléments mémorisés. Les deux premières méthodes décalent les éléments qui suivent l'élément retiré du tableau du vecteur à un indice inférieur.

public final boolean isEmpty ()

Renvoie true si le vecteur est vide.

public final int size ()

Renvoie le nombre d'éléments mémorisés dans le vecteur.

public final synchronized void setSize (int newSize)

Modifie la taille du vecteur. Si newSize est plus petit que le nombre d'éléments courant du vecteur, les derniers éléments sont perdus, sinon un ensemble d'éléments égaux à null sont ajoutés pour atteindre la taille newSize.

public final int capacity ()
public final synchronized void ensureCapacity (int minCapacity)

Ces méthodes permettent d'interroger ou de modifier la capacité courante du vecteur. La capacité du vecteur est le nombre maximum que son tableau peut contenir avant que celui-ci est besoin d'être agrandi.

public final synchronized void trimToSize ()

Réduit la capacité du tableau du vecteur aux nombres d'éléments mémorisés par le vecteur.

public final synchronized Object firstElement ()
                                   throws NoSuchElementException
public final synchronized Object lastElement ()
                                   throws NoSuchElementException

Ces méthodes renvoient le premier ou le dernier élément mémorisé par le vecteur.

public final synchronized void copyInto (Object array [ ])
                                 throws IndexOutOfBoundsException

Recopie dans le tableau array l'ensemble des éléments mémorisés par le vecteur. Si array est top petit, une exception IndexOutOfBoundsException est déclenchée.

public final synchronized Enumeration elements ()

Permet d'énumérer les éléments du vecteur.

public final boolean contains (Object elem)

Renvoie true si le vecteur contient un élément égal à elem. La méthode equals () de la classe de l'objet elem est utilisée pour comparer les objets.

public final int indexOf (Object elem)
public final synchronized int indexOf (Object elem, int index)
                     throws IndexOutOfBoundsException
public final int lastIndexOf (Object elem)
public final synchronized int lastIndexOf (Object elem, int index)
                     throws IndexOutOfBoundsException

Ces méthodes renvoient l'indice du premier ou du dernier élément égal à elem, ou -1 si elem n'est pas trouvé. La méthode equals () de la classe de l'objet elem est utilisée pour comparer les objets. index permet d'éventuellement spécifier le premier indice à partir duquel commencer la recherche.

public synchronized Object clone ()

Renvoie un clone du vecteur. Les éléments du vecteur ne sont pas clonés eux-mêmes. Cette méthode outrepasse la méthode clone () de la classe Object.

public final synchronized String toString ()

Cette méthode outrepasse la méthode toString () de la classe Object, pour renvoyer une chaîne de caractères décrivant la liste des éléments mémorisés par le vecteur.

Exemples

Application ConcatenationFichiers.
Applet PaperBoardClient.

La classe java.util.Stack

Cette classe qui dérive de Vector permet de créer des piles, où vous pouvez empiler un objet avec la méthode push (), retirer l'élément en haut de la pile avec pop (), ou consulter sans le retirer l'élément en haut de la pile avec peek ().

Méthodes
public Object push (Object item)
public Object pop () throws EmptyStackException
public Object peek () throws EmptyStackException
public boolean empty ()
public int search (Object o)

La classe java.util.Dictionary

Cette classe abstract permet de créer un dictionnaire représenté par un ensemble d'entrées associant un élément et une clé. Chaque clé du dictionnaire est unique et est associé au plus à un élément, mais un même élément peut avoir plusieurs clés d'accès. Les éléments et les clés devant être de la classe Object, le cast de références permet donc d'utiliser n'importe quel type de classe pour les clés et les éléments (chaînes de caractères, classes d'emballage des nombres ou d'autres classes).
Un dictionnaire peut être comparé à un tableau : Dans un tableau tab, vous mémorisez un ensemble d'éléments accessible grâce à un indice entier i, par l'expression tab [i]. Il est possible de mémoriser plusieurs fois le même objet dans tab à des indices différents, mais par contre chaque indice i est unique et vous permet d'accéder aux différents éléments du tableau grâce à tab [i]. Dans un dictionnaire dict, vous mémorisez de la même manière des éléments auquel vous accédez grâce à une clé plutôt que par un indice entier. Cette clé peut être de n'importe quelle classe, ce qui permet de mémoriser les éléments d'une manière plus riche qu'avec un simple indice entier. Pour faire un parallèle entre l'utilisation d'un tableau tab et d'un dictionnaire dict, l'expression tab [i] = element a pour équivalent dict.put (cle, element) et l'expression element = tab [i] a pour équivalent element = dict.get (cle).
Voici toutes les méthodes que doit implémenter une classe dérivant de Dictionary, pour pouvoir être instanciée (comme la classe Hashtable) :

Constructeur
public Dictionary ()
Méthodes
abstract public int size ()

size () doit renvoyer le nombre d'entrées dans le dictionnaire. Chaque clé devant être unique ce nombre est égal au nombre de clés.

abstract public boolean isEmpty ()

isEmpty () renvoie true si le dictionnaire ne contient aucune entrée.

abstract public Object get (Object key)

Cette méthode doit renvoyer l'élément associé à la clé key, ou null si la clé key n'existe pas.

abstract public Object put (Object key, Object element)

Cette méthode doit ajouter dans le dictionnaire une entrée associant la clé key avec l'élément element. Si une entrée avec une clé égale à key existe déjà (par la méthode equals ()), l'élément de cette entrée est renvoyé par put () après avoir été remplacé par element. Sinon put () renvoie null, après avoir ajouté une nouvelle entrée.

abstract public Object remove (Object key)

Cette méthode doit supprimer du dictionnaire l'entrée ayant comme clé key. Si une entrée avec une clé égale à key existe déjà (par la méthode equals ()), l'élément de cette entrée est renvoyé par remove () après que cette entrée ait été supprimée. Sinon, remove () renvoie null.

abstract public Enumeration keys ()
abstract public Enumeration elements ()

Ces méthodes doivent renvoyer un objet d'une classe implémentant Enumeration permettant d'énumérer les clés et les éléments du dictionnaire respectivement.

La classe java.util.Hashtable

Cette classe implémente l'interface Cloneable et dérive de la classe Dictionary dont elle implémente toutes les méthodes, en y ajoutant certaines méthodes. Les tables de hash utilise la valeur que retourne la méthode hashCode () des clés, pour organiser le rangement des entrées de la table afin que get () fonctionne avec efficacité. Les objets utilisés comme clés dans une table de hash devraient avoir leur classe qui outrepassent les méthodes equals () et hashCode () pour un fonctionnement correct (voir la classe Object).

Constructeurs
public Hashtable (int initialCapacity, float loadFactor)

Crée une table de hash avec une capacité initiale de initialCapacity entrées. La table est réorganisée avec la méthode rehash (), à chaque fois que le nombre d'entrées atteint loadFactor multiplié par la capacité de la table (0 < loadFactor < 1) . Plus loadFactor est petit, plus souvent la table sera réorganisée, mais attention cette opération prend du temps ! Si c'est possible, Il vaut mieux prévoir une table de hash avec une capacité initiale proche du nombre d'éléments à mémoriser dans la table, pour éviter que la table ait trop souvent à se réorganiser.

public Hashtable (int initialCapacity)
public Hashtable ()
Méthodes
public int size ()
public boolean isEmpty ()
public synchronized Object get (Object key)
public synchronized Object put (Object key, Object element)
public synchronized Object remove (Object key)
public synchronized Enumeration keys ()
public synchronized Enumeration elements ()

Ces méthodes outrepassent celles de la classe Dictionary. Pour plus d'informations, consultez la classe Dictionary.

public synchronized boolean contains (Object element)
public synchronized boolean containsKey (Object key)

Ces méthodes renvoient true si respectivement un élément ou une clé existe dans la table.

public synchronized void clear ()

clear () supprime toutes les entrées (clés et éléments) de la table.

protected void rehash ()

Cette méthode agrandit et réorganise la table pour plus d'efficacité.

public synchronized Object clone ()

Renvoie un clone de la table de hash. Cette méthode outrepasse la méthode clone () de la classe Object.

public synchronized final String toString ()

Cette méthode outrepasse la méthode toString () de la classe Object, pour renvoyer une chaîne de caractères décrivant l'ensemble des entrées (clé + élément) de la table.

La classe java.util.Properties

Cette classe dérivant de Hashtable désigne une table de hash ne pouvant mémoriser que des chaînes de caractères et comportant des fonctionnalités de sauvegarde/lecture dans un fichier.
Cette classe ressemble un peu à la gestion des fichiers profile Windows (.INI), et la classe System l'utilise pour mémoriser les propriétés associés à un programme Java.

Champ
protected Properties defaults
Constructeurs
public Properties ()
public Properties (Properties defaults)
Méthodes
public String getProperty (String property)
public String getProperty (String property, String defaultValue)

Ces méthodes renvoient la propriété de nom property, ou defaultValue si cette propriété n'est pas définie.

public Enumeration propertyNames ()

Permet d'énumérer l'ensemble des noms de propriétés.

public void list (PrintStream out)

Ecrit sur le flux de données out la liste des propriétés et de leur valeur.

public synchronized void load (InputStream in) throws IOException
public synchronized void save (OutputStream out, String header)

Ces méthodes permettent d'écrire ou de lire un ensemble de propriétés à patir des flux de données in ou out. Le format des données est ensemble de couples property=value.

La classe java.util.BitSet

Cette classe final qui implémente l'interface Cloneable permet de manipuler aisément un ensemble de bits. Les objets de cette classe ont leur nombre de bits mémorisés qui croit automatiquement à l'appel des méthodes set () et clear (). Les méthodes and (), or () et xor () permettent d'effectuer les opérations ET, OU et OU Exclusif bit à bit sur les ensembles de bits des objets de cette classe.

Constructeurs
public BitSet ()
public BitSet (int nbits)

Les nbits bits qu'une instance de la classe BitSet mémorise sont stockés dans un tableau dont les éléments sont de type long (64 bits).

Méthodes
public boolean get (int bitIndex)
public void set (int bitIndex)
public void clear (int bitIndex)
public void and (BitSet set)
public void or (BitSet set)
public void xor (BitSet set)
public int size ()
 
public boolean equals (Object obj)
public int hashCode ()
public Object clone ()
public String toString ()
 

Gestion des dates

La classe java.util.Date

Cette classe permet de manipuler les dates. Les objets de cette classe représente un moment donné à la seconde près. La classe Date fournit des méthodes permettant d'obtenir ou de modifier l'année, le mois, le jour, l'heure, la minute ou la seconde d'une date et de comparer des dates.

!

Les objets de la classe Date ne sont pas des horloges. A chaque fois que vous voulez obtenir le temps courant, utilisez la méthode currentTimeMillis () de la classe System, ou créez un nouvel objet de classe Date avec le constructeur par défaut.

Constructeurs
public Date ()
public Date (long time)
public Date (int year, int month, int date)
public Date (int year, int month, int date, int hours, int minutes)
public Date (int year, int month, int date, int hours,
              int minutes, int seconds)
public Date (String s) throws IllegalArgumentException
Méthodes
public int getYear ()
public void setYear (int year)
public int getMonth ()
public void setMonth (int month)
public int getDate ()
public void setDate (int date)
public int getHours ()
public void setHours (int hours)
public int getMinutes ()
public void setMinutes (int minutes)
public int getSeconds ()
public void setSeconds (int seconds)

Ces méthodes permettent d'interroger ou de modifier l'année, le mois, le jour du mois, l'heure, la minute ou la seconde d'une date.

public int getDay ()

Renvoie le jour de la semaine sachant que le nombre 0 correspond à dimanche.

public long getTime ()
public void setTime (long time)

Ces méthodes permettent d'interroger ou de modifier le temps en millisecondes

public boolean before (Date when)
public boolean after (Date when)

Ces méthodes renvoient true si une date est inférieure ou supérieure à la date when.

public int getTimezoneOffset ()
public static long UTC (int year, int month, int date,
                         int hours, int minutes, int seconds)
 
public static long parse (String s) throws IllegalArgumentException

Renvoie le temps à partir d'une chaîne de caractère respectant le format IETF.

public String toLocaleString ()

Renvoie une chaîne de caractères décrivant la date courante respectant la notation locale.

public String toGMTString ()

Renvoie une chaîne de caractères décrivant la date courante respectant la notation GMT.

public boolean equals (Object obj)
public int hashCode ()
public String toString ()
Exemples

Applets TraitementTexte, MiseAJourHorloge et Horloge.

Génération de nombres aléatoires

La classe java.util.Random

Les méthodes de la classe Random permettent de générer des nombres aléatoires, comme la méthode random () de la classe java.lang.Math. Ces méthodes peuvent générer des nombres entiers, décimaux (entre 0. inclus et 1. exclus) ou respectant la courbe de Gauss (entre -1. et 1.).

Constructeurs
public Random ()
public Random (long seed)

Le second constructeur permet de créer un générateur dont on fournit la base de départ. Pour une même base, la série de nombres aléatoires générées sera toujours la même à chaque exécution d'un programme. Le premier constructeur crée un générateur dont la base est égale au temps courant. Ce temps étant toujours différent d'une exécution à l'autre, chaque série sera différente à chaque exécution.

Méthodes
public synchronized void setSeed (long seed)
public int nextInt ()
public long nextLong ()
public float nextFloat ()
public double nextDouble ()
public synchronized double nextGaussian ()
 
Exemples

Applets ObservateurCalcul, DrawIt et ImageNoirEtBlanc.

Autres classes d'outils

La classe java.util.StringTokenizer

Cette classe permet d'énumérer à partir d'une chaîne de caractères str un ensemble de sous-chaînes séparées par des délimiteurs (voir aussi la classe java.io.StreamTokenizer).

Constructeurs
public StringTokenizer (String str, String delim, boolean returnTokens)
public StringTokenizer (String str, String delim)
public StringTokenizer (String str)

Permet de spécifier la chaîne str dans laquelle on recherche des sous-chaînes. Les sous-chaînes sont séparées par des délimiteurs qui peuvent être n'importe quel caractère de delim. Si returnTokens est true, l'énumération rendra les sous-chaînes et les délimiteurs. Par défaut, le délimiteur est un espace et returnTokens est égal à false.

Méthodes
public boolean hasMoreElements ()
public boolean hasMoreTokens ()

Ces deux méthodes renvoient vraies si la chaîne str a encore des sous-chaînes à énumérer.

public Object nextElement () throws NoSuchElementException
public String nextToken () throws NoSuchElementException
public String nextToken (String delim) throws NoSuchElementException

Ces trois méthodes renvoient la sous-chaîne suivante de str (ou le délimiteur si returnTokens est true), et avance la position de recherche dans str au caractère suivant la sous-chaîne renvoyée. La troisième méthode permet de remplacer les délimiteurs recherchés.

public int countTokens ()

Renvoie le nombre de sous-chaînes restant à énumérer.

L'interface java.util.Observer

Toute classe qui implémente cette interface peut instancier un observateur d'un objet observé. Cette objet observé dont la classe est Observable ou ses dérivées, peut prévenir tous ses observateurs d'un changement en appelant automatiquement la méthode update () de chacun d'eux. Voir la classe Observable.

Méthode
public void update (Observable o, Object arg)
 
Exemple

Applet ObservateurCalcul.

La classe java.util.Observable

Cette classe permet de créer des objets observés par des observateurs, ces derniers étant des objets dont la classe implémente l'interface Observer. Quand un objet observé appelle la méthode notifyObservers () à la suite d'un changement, chacun de ses observateurs voit sa méthode update () appelée.
La méthode notifyObservers () n'a d'effet que si l'objet observé a changé suite à un appel à la méthode setChanged (). Comme setChanged () est protected, il n'est possible de l'invoquer qu'à partir d'une sous classe d'Observable, ce qui vous oblige à créer une classe dérivée de la classe Observable pour pouvoir vous en servir.

Constructeur
public Observable ()
Méthodes
public synchronized void addObserver (Observer o)
public synchronized void deleteObserver (Observer o)
public synchronized void deleteObservers ()
public synchronized int countObservers ()

Ces méthodes permettent d'ajouter, de supprimer ou de compter les observateurs d'un objet.

public void notifyObservers ()
public synchronized void notifyObservers (Object arg)

Ces méthodes provoqueront l'appel de la méthode update () de chacun des observateurs, si l'objet a appelé setChanged () pour spécifier que l'objet a été modifié. arg, par défaut égal à null, est passé en paramètre à la méthode update () des observateurs.

protected synchronized void setChanged ()
protected synchronized void clearChanged ()
public synchronized boolean hasChanged ()

Ces méthodes permettent de valider, d'annuler ou d'interroger un flag indiquant si l'objet a changé.

Voici un exemple illustrant l'utilisation de la classe Observable et de l'interface Observer, avec une applet affichant des sinusoïdes, dérivée de l'exemple du chapitre sur les threads :

Applet ObservateurCalcul

et le programme Java correspondant (à copier dans un fichier dénommé ObservateurCalcul.java et invoqué à partir d'un fichier HTML) :

import java.awt.*;
import java.applet.Applet;
import java.util.*;

public class ObservateurCalcul extends Applet implements Observer
{
  private CalculateurObservable calculateur;
  private int [ ]    courbe;
  private Random     generateur = new Random ();

  public void start ()
  {
    // Création d'un calculateur 
    CalculateurObservable calculateur = new CalculateurObservable (size ().width, 
                                                                   size ().height);
    // L'applet se déclare comme observateur du calculateur
    calculateur.addObserver (this);
  }

  public void stop ()
  {
    calculateur.stop ();
  }

  // Implémentation de l'interface Observer
  public void update (Observable calculateur, Object courbe)
  {
    // Récupération de la courbe calculée
    this.courbe = (int [])courbe;
    // Affichage de la nouvelle courbe
    repaint (); // repaint () efface le fond puis appelle paint ()
  }

  // Méthode appelée par le système pour mettre à jour le dessin de l'applet
  public void paint (Graphics gc)
  {
    // Création d'une couleur aléatoire
    gc.setColor (new Color (generateur.nextFloat (),
                            generateur.nextFloat (),
                            generateur.nextFloat ()));
    if (courbe != null)
      // Dessin de la courbe en reliant les points un à un
      for (int i = 1; i < courbe.length; i++)
        gc.drawLine (i - 1, courbe [i - 1], i, courbe [i]);
  }
}

class CalculateurObservable extends Observable implements Runnable
{
  private int        width;
  private int        height;
  private Thread     threadCalculateur;

  public CalculateurObservable (int width, int height)
  {
    this.width  = width;
    this.height = height;
    // Démarrage d'un thread de calcul
    (threadCalculateur = new Thread (this)).start ();
  }

  public void stop ()
  {
    threadCalculateur.stop ();
  }

  public void calculerCourbe ()
  {
    int [] courbe  = new int [width];
    // Calcul d'une sinusoïde avec fréquence aléatoire
    double pasCalcul = 2 * Math.PI / courbe.length / Math.random ();
    for (int i = 0; i < courbe.length; i++)
      courbe [i] = (int)((Math.sin (i * pasCalcul) + 1) * height / 2);
      
    // Nouveau calcul
    setChanged ();
    // Appel de la méthode update () des observateurs
    notifyObservers (courbe);
  }

  public void run ()
  {
    try
    {
      while (threadCalculateur.isAlive ())
      {
        // Calculer une courbe 
        calculerCourbe ();
        Thread.sleep (200);
      }
    }
    catch (InterruptedException e) { }
  }
} 

Page d'accueilFindIt !ContactLes classes de basesLa gestion des fichiers et des flux de donnéesDébut de la page
© Copyrights 1997-2023 Emmanuel PUYBARET / eTeks
- Tous droits réservés -
Table des matièresHiérarchie des classes