Bas de page
Page précédente Sommaire Page suivante
Bas de page

IV) LES API JAVA

4) Le package java.util

4-1) La classe java.util.Vector

Cette classe permet de gérer des tableaux extensifs de références à des objets (éventuellement hétérogènes). Elle
permet de s'affranchir des pointeurs pour l'allocation dynamique.

Vector vector = new Vector();
String a = "a";
vector.addElement(a);
vector.addElement("b");
vector.removeElement(a);
System.out.println(vector.firstElement()); //b

Toutes les manipulations classiques sont disponibles : size(), indexOf(), elementAt(), elements(),
removeElementAt().

4-2) La classe java.util.Hashtable

Une table de hachage est un dictionnaire qui associe à une clef un élément.

Hashtable anniv = new HashTable();
anniv.put("Paul",new Date(24 Fev 60));
anniv.put("Alexandre", new Date(17 Mar 80));
anniv.get("Paul");


Une double définition pour une même clef entraîne le remplacement de l'élément, et la méthode put retourne
l'ancien élément associé.
La valeur utilisée pour le hachage d'un objet est la valeur retournée par la méthode hashCode(). Cette
méthode est définie par défaut dans la classe Object comme un entier unique associé à chaque objet lors de sa
création. Elle est masquée par une autre méthode dans certaines classes comme String afin d'assurer que deux
objet différents mais équivalents ont un même code.

4-3) L'interface java.util.Enumeration.

Définir une classe qui implémente Enumeration permet d'encapsuler de façon élégante l'accès à une suite
d'éléments. L'interface contient deux méthodes hasMoreElements() et nextElement(). Le code suivant
aurait dû définir une nouvelle Enumeration afin de bien séparer la notion de parcours des éléments du
traitement de ceux-ci.

Vector v = new Vector();
Enumeration enum = v.elements();
while(enum.hasMoreElement()){
Object elemRangPair = enum.nextElement();
....
if (enum.hasMoreElement())
enum.nextElement();
}
Une solution plus encapsulée et réutilisable pourrait être :
Vector v = new Vector();
Enumeration enum = new EnumRangPair(v.elements());
while(enum.hasMoreElement()){
Object elemRangPair = enum.nextElement();
....
}
class EnumRangPair implements Enumeration {
Enumeration initialEnumeration;
Object elem = null;
public EnumRangPair(Enumeration initialEnumeration){
this.initialEnumeration = initialEnumeration;
}
public boolean hasMoreElements {
if(elem != null) return true;
if (initialEnumeration.hasMoreElement()) {
elem = initialEnumeration.nextElement();
if (initialEnumeration.hasMoreElement()) {
initialEnumeration.nextElement();
}
return true;
}
return false;
}
public Object nextElement throws NoSuchElementException {
if(elem == null) {
if(!hasMoreElements()) {
throw new NoSuchElementException();
}
}
Object tmp = elem;
elem = null;
return tmp;
}
}


4-4) La classe java.util.Properties

Cette classe est un dictionnaire permettant d'associer deux chaînes de caractères.

Properties prop = new Properties();
prop.put("graphe.x","20");
prop.put("graphe.y","50");
String xString = prop.getProperty("graphe.x");


Une hiérarchie de recherche peut être spécifiée en combinant plusieurs Properties. Un ensemble de
propriétés intéressant est celui obtenu par System.getProperties.

Properties prop = new Properties(defaultProperties);

Une table de Properties peut être lue ou sauvée grâce aux méthodes load ou save. La méthode load
prend en paramètre un InputStream qui peut être un flux pointant sur un fichier et qui peut s'avérer très utile
pour initialiser un programme d'une manière relativement simple. Les fichiers sont écrits sous la forme suivante :

# Ceci est un commentaire expliquant
# le contenu du fichier
# Port de connexion par défaut
Port=80
# Timeout d'une connexion (en secondes)
Timeout=1


4-5) La classe java.util.ResourceBundle

Cette classe permet de modifier certaines propriétés en fonction du système local (i.e. avoir des menus
différents). Pour cela on utilise un objet de type Locale qui contient une langue, un pays et éventuellement une
variante (type de système). Par exemple fr_FR.

ResourceBundle myResources =
ResourceBundle.getBundle("MyResources", Locale.getDefault());
String texte = myResources.getString("File");


Le système va alors chercher la classe la plus précise par rapport à la locale. Par exemple
MyResources_fr_FR, puis appelle la méthode getString(). Cette classe peut être construite de deux
façons soit en héritant de ListResourceBundle soit de PropertiesResourceBundle.

class MyResource extends ListResourceBundle
{
public Object[][] getContents()
{
return contents;
}
static final Object[][] contents={{"File","File"},{"Save", "Save"}
};
class MyResource_fr extends MyResource
{
static final Object[][] contents={{"File","Fichier"},{"Save","Sauve"}
};


ou encore

class MyResource extends PropertyResourceBundle
{
MyResource(){super(new FileInputStream("MyResource"));}
};
class MyResource_fr extends MyResource
{
MyResource_fr(){super(new FileInputStream("MyResource_fr"));}
};



Haut de page
Page précédente Sommaire Page suivante
Haut de page
Contactez-nous
Conditions d'utilisation
Qui sommes nous?
© 2001 IsepFAQtory Tous droits réservés