Le package java.util est un package "fourre-tout" qui contient des classes utiles pour la résolution de certains problèmes.
Le constructeur de cette classe peut prendre les formes Date( ), Date(long 
date), Date(int year, int month, int date), Date(int year, int month, int date, 
int hrs, int min), Date(int year, int month, int date, int hrs, int min, int 
 sec) et Date(String s). Dans ce dernier cas, la chaîne est de la forme 
"day, date month year hrs:min:sec GMT" dans laquelle day est le nom 
du jour sous la forme Mon, Tue, Wed, Thu, Fri, Sat ou Sun. Dans les versions 
1.0.x, les dates démarrent le 1 janvier 1970.
La version Date( ) correspond 
à la date courante. Dans la version Date(long date), date correspond au nombre 
de millisecondes écoulées entre le 1-01-1970 minuit et la date à définir. Les 
méthodes les plus utiles sont getTime( ) qui retourne un long correspond 
au nombre de millisecondes écoulées entre le 1-01-1970 et la date utilisée, getDate( 
) qui retourne un int correspondant à la date du jour, getDay( ) qui retourne 
le jour, getMonth( ), getYear( ), getHours( ), getMinutes( ).
Les méthodes 
set correspondantes permettent de fixer les mêmes paramètres d'une date donnée.
Une 
originalité : les mois vont de 0 (janvier) à 11 (décembre).
L'exemple 
ci-dessous met en oeuvre un certain nombre de ce méthodes. On demande à l'utilisateur 
d'entrer sa date de naissance et on retourne son age.
import java.applet.*;
import java.awt.*;
import java.util.*; 
//importation du package
public class date10 extends Applet
{ int jour=15,mois=8,annee=70; 
 //valeurs initiales
  Font font = new Font("Helvetica",0,12);
  Label lb1,lb2,lb3;
  TextField tf1=new TextField(""+jour,2);
  TextField tf2=new TextField(""+(mois-1),2);
  TextField tf3=new TextField(""+annee,2);
  Date D = new Date(); 
//date actuelle du client
  String s;
public void init()  
{ setBackground(Color.lightGray);
  setFont(font);
  lb1=new 
Label("Jour",2);
  add(lb1);   add(tf1);
  lb2=new 
Label("Mois",2);
  add(lb2);    add(tf2);
  lb3=new 
Label("Année",2);
  add(lb3);    add(tf3);}
public boolean action(Event 
evt, Object arg)
{  if 
(evt.target==tf1) {
      s=tf1.getText();    jour=Integer.parseInt(s);}
   else 
if (evt.target==tf2) {
      s=tf2.getText();    mois=Integer.parseInt(s)-1;}//0 
à 11 !!!
   else 
if (evt.target==tf3){
      s=tf3.getText();    annee=Integer.parseInt(s);}
   else 
return super.action(evt,arg);
   repaint();   return 
true;}
public void paint(Graphics 
g)
{ g.drawString("Nous 
sommes le : "+D,20,50);
  g.drawString("Entrer 
votre date de naissance :",20,70);
  Date 
Dnai = new Date(annee,mois,jour);
  g.drawString("né(e) 
le : "+Dnai.toString(),20,90);
  Date 
Dage = new Date((long)(D.getTime()-Dnai.getTime()));
  s 
= "Vous avez "+(Dage.getYear()-70)+" ans, "; //origine 
1970
  s 
= s+Dage.getMonth()+" mois et ";
  s 
= s+(Dage.getDate()-1)+" jours.";
  g.drawString(s,20,110);
  g.drawString(""+D.getTime()+" 
ms écoulées depuis le 01/01/1970 minuit",20,130); 
}
Valider chaque saisie.
    Cette classe permet de découper une chaîne de caractères 
en fonction de séparateurs (virgule, espace ...). Les utilisateurs des anciens 
BASIC retrouvent avec cette classe l'équivalent des instructions DATA.
Le 
constructeur StringTokenizer(String s, String sep) comporte deux paramètres 
: la chaîne s à découper et sep qui est une chaîne 
contenant les séparateurs à utiliser pour le découpage en éléments.
La méthode 
hasMoreTokens( ) retourne true tant que la chaîne s contient 
des éléments à découper. La méthode nextToken( ) retourne une chaîne 
qui contient l'élément en question. On utilise en général (comme dans l'exemple 
ci-dessous) une boucle while pour décomposer la chaîne s en ses différents éléments.
import 
java.applet.*;
import java.awt.*;
import java.util.*; //importer 
le package
public 
class version extends Applet
{  String s="10,15,24,36,,78;47,26 
38,45,9";//chaîne 
à découper
   int 
Tab[] = new int[10]; //tableau 
des valeurs
public 
void paint(Graphics g)
{ int i=0;
  StringTokenizer st 
=new StringTokenizer(s,"; ,");//3 
séparateurs 
; , et blanc
  while 
(st.hasMoreTokens()){  //boucle 
de lecture
    Tab[i]=Integer.parseInt(st.nextToken()); 
 //éléments du tableau
    g.drawString(""+Tab[i],20,20+15*i);
    i++;}}
}
Remarques
 a) dans l'exemple ci-dessus, il serait bien plus simple 
de procéder directement à l'affectation du tableau au moyen de l'instruction 
:
Tab[] = {10,15,24,36,78,47,26,38,45,9};
b) noter que la seconde virgule 
entre 36 et 78 sera ignorée.
Cette classe permet de générer des nombres pseudo-aléatoires de façon plus 
complète que la méthode Math.random( ) de java.lang qui à chaque appel renvoie 
un double compris entre 0.0d et 1.0d .
Après appel du constructeur Random 
rnd = new Random( ); , il suffit d'utiliser la méthode qui correspond 
au type de nombre aléatoire que l'on désire obtenir.
rnd.nextInt( ) 
retourne un entier int compris entre Integer.MIN_VALUE (-2147488348) et Integer.MAX_VALUE 
(2147488347).
rnd.nextLong( ) retourne un entier long compris entre 
Long.MIN_VALUE  et Long.MAX_VALUE.
rnd.nextDouble( ) et rnd.nextFloat( 
) retournent un double ou un float compris entre 0 et 1.
rnd.nextGaussian( 
) retourne un double avec une distribution gaussienne de moyenne 0.0 
et de déviation 1.0.
Enfin la méthode setSeed(long seed) permet de 
fixer la valeur de la "graine" utilisée par le générateur pseudo-aléatoire. 
En fixant la valeur de la graine, on obtient toujours la même séquence de valeurs 
pseudo-aléatoires lors d'exécutions successives du programme. 
La classe Vector permet de créer et de manipuler des tableaux d'objets 
dynamiques. La dimension du tableau peut en effet varier automatiquement 
quand on y insère de nouveaux éléments. Pour des raisons d'efficacité, 
il est conseillé d'accroître sa taille avant l'ajout d'un nombre important d'éléments 
afin de limiter les réallocations mémoire au minimum. Il n'y a pas de restrictions 
sur la nature des objets (on peut même mélanger des objets différents dans un Vector).
Les 
constructeurs sont Vector( ) qui crée un tableau vide de dimension nulle, 
Vector(int nb) qui crée un tableau vide de dimension nb et Vector(int 
nb, int inc) qui crée un tableau vide de dimension nb et dont la taille 
augmente de inc à chaque fois que la taille maximum est atteinte.
 
Il n'est pas possible de stocker de nombres dans un vecteur mais il est possible 
de stocker des instances des classes Integer, Double ... car ce sont des objets.
Les principales méthodes de cette classe sont :
addElement(Object obj) 
ajoute un élément à la fin de la liste.
capacity(int nb) retourne la taille 
actuelle.
contains(Object obj) retourne un booléen indiquant la présence 
ou l'absence de l'objet obj dans le Vector.
elementAt(int index)  retourne 
l'élément situé à la place index.
indexOf(Object obj) donne l'index 
de l'objet obj.
insertElementAt(Object obj, int index) insert l'objet obj à 
la place index. Les éléments suivants l'index sont décalés vers le bas.
setElementAt(Object 
obj, int index) modifie l'objet à la place index.
removeElementAt(int index) 
supprime l'objet situé à index. Les éléments suivants l'index sont décalés vers 
le haut.
setSize(int nb) fixe la taille actuelle.
De la classe Vector dérive la classe Stack qui implémente une pile d'objets. La méthode push( ) place un objet sur le haut de la pile, pop( ) supprime l'objet situé sur le haut de la pile et la méthode peek( ) retourne l'objet situé sur le haut de la pile sans l'enlever.
 Cette classe implémente une structure qui à chaque donnée associe une 
clé. C'est un tableau d'objets qui stocke ceux-ci avec des 
indices non numériques.
 Les 
constructeurs sont Hashtable( ) qui crée une table vide de dimension nulle, 
Hashtable(int nb) qui crée une table vide de dimension nb et Hashtable(int 
nb, float inc) qui crée une table vide de dimension nb et dont la taille 
augmente quand le nombre d'éléments de la table dépasse le produit nb*inc. (inc 
doit être compris entre 0.0f et 1.0f).
Les principales méthodes de cette classe sont :
put(Object key, Object 
data)  ajoute un élément et sa clé à la table.
get(Object key) 
retourne l'élément de la table dont la clé est key.
remove(Object key) supprime 
l'élément de la table dont la clé est key.