java.lang.Class

publicité
Cours de JAVA
Quelques classes remarquables de JAVA
Emmanuel ADAM
Institut des Sciences et Techniques de Valenciennes
Université de Valenciennes et du Hainaut-Cambrésis
source principale :
« Thinking in Java (B. Eckel) »
Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis –– Cours JAVA n°2 – p: 1
Quelques classes remarquables de
JAVA
Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis –– Cours JAVA n°2 – p: 2
La classe Object
 Il s’agit de la classe principale, elle contient les fonctions :
 protected Object clone() qui crée et retourne une copie de l’objet
 boolean equals(Object obj) qui détermine si obj est égal à l’objet courant.
 protected void finalize() appelé par le ramasse miettes s’il n’y a plus de
référence à l’objet
 Class getClass() retourne la classe courante de l’objet
 int hashCode() retourne une clé pouvant être utilisée pour un tri
 void notify() réveille un processus en attente sur l’objet
 void notifyAll() réveille tous les processus en attente
 String toString() retourne une chaîne représentant l’objet
 void wait() met en pause le processus courant en attendant un réveil
 Tous les objets Java héritent donc de ces méthodes
Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis –– Cours JAVA n°2 – p: 3
La classe String (1)
 Les chaînes sont constantes, leurs valeurs ne peuvent
être changées après leurs créations.
 StringBuffer permet l’utilisation de chaînes
"dynamiques".
 Construction :
String str = "abc"; est équivalent à
char data[] = {'a', 'b', 'c'};
String str = new String(data);
 La classe String comporte des méthodes d’accès aux caractères, de
comparaisons, de recherche, d’extraction, de copie, de conversion
minuscules/majuscule, ...
Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis –– Cours JAVA n°2 – p: 4
La classe String (2)
 L’opérateur (+) est surchargé pour permettre la
concaténation, et à la conversion implicite d’objets en
chaîne.
 Toute conversion se fait de manière automatique en
faisant appel à la méthode toString() héritée de la
classe Object.
Il est donc possible de surcharger cette méthode dans
les nouvelles classes créées.
Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis –– Cours JAVA n°2 – p: 5
La classe String (3)
















char charAt(int index) → retourne le caractère de la position index
int compareTo(String anotherString) → compare la chaîne à une autre, en gérant les majuscules-minuscules.
Retourne 0 en cas d’égalité, un entier négatif si la chaîne est inférieure à l’autre, et positif si la chaîne est
supérieure à l’autre chaîne.
int compareToIgnoreCase(String str) → idem que la précédente, mais ignore la case.
String concat(String str) → ajoute la chaîne str à la fin de la chaîne.
boolean endsWith(String suffix) → teste si la chaine se termine par le suffixe.
boolean equals(Object anObject) → nécessaire pour comparer deux chaînes, traite la case.
boolean equalsIgnoreCase(String anotherString) → idem, mais ignore la case.
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) → copie les caractères de la chaîne dans
un tableau de caractères.
int indexOf(int ch) → retourne l’index de la première occurrence du caractère.
On trouve aussi int indexOf(int ch, int fromIndex) ; int indexOf(String str) et int indexOf(String str,
int fromIndex)
Ainsi que int lastIndexOf(int ch) ; int lastIndexOf(int ch, int fromIndex) ; int lastIndexOf(String str) ;
int lastIndexOf(String str, int fromIndex) ;.
int length() → retourne la longueur
String replace(char oldChar, char newChar) → retourne une nouvelle chaîne après le remplacement de
toutes les occurrences du caractère.
boolean startsWith(String prefix) → teste si la chaîne commence par le préfixe.
String substring(int beginIndex, int endIndex) → extrait une sous-chaîne.
String toLowerCase() ; String toUpperCase() → change la case.
String trim() → efface les espaces avant et après.
Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis –– Cours JAVA n°2 – p: 6
Des classes très utiles
(import java.util.*)
Interfaces : Collection, Comparator, Enumeration,
EventListener, Iterator, List, ListIterator, Map, Map.Entry,Observer,
Set, SortedMap, SortedSet
Classes : AbstractCollection, AbstractList, AbstractMap,
AbstractSequentialList, AbstractSet, ArrayList, Arrays, BitSet,
Calendar, Collections, Date, Dictionary, EventObject,
GregorianCalendar, HashMap, HashSet, Hashtable, LinkedList,
ListResourceBundle, Locale, Observable, Properties,
PropertyPermission, PropertyResourceBundle, Random,
ResourceBundle, SimpleTimeZone, Stack, StringTokenizer,
TimeZone, TreeMap, TreeSet, Vector, WeakHashMap
Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis –– Cours JAVA n°2 – p: 7
La classe Arrays
 Cette classe contient des méthodes statiques pour la gestion
de tableaux :
 static int binarySearch(int []tab, int valeur)
retourne l’index de la valeur, -1 si introuvable
 static boolean equals (boolean []tab1, boolean []tab2)
 static void fill (double []tab, double valeur)
remplit le tableau avec la valeur
 static void fill (char []tab, int debut, int fin, char valeur)
 static void sort (long []tab)
 static void sort (short [] tab, int debut, int fin)
 s’appliquent à tous types de tableaux : d’entiers, de réels,
d’objets (références seules prises en compte)
Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis –– Cours JAVA n°2 – p: 8
La classe Arrays
int []tab = new int[100];
for(int i=0; i<tab.length; i++)
tab[i] = (int)(Math.random()*100);
String ch = "";
for(int i=0; i<tab.length; i++)
ch = ch + tab[i] + ", ";
System.out.println(ch);
long tpsDebut = System.currentTimeMillis();
java.util.Arrays.sort(tab);
long tpsFin = System.currentTimeMillis();
ch="";
for(int i=0; i<tab.length; i++)
ch = ch + tab[i] + ", ";
System.out.println(ch);
56,
95,
44,
59,
63,
48,
54,
82, 84, 7, 87, 82, 23, 15, 37, 0, 32, 27, 11, 77, 59, 46,
54, 63, 80, 72, 78, 43, 88, 97, 65, 91, 82, 20, 69, 18,
67, 91, 81, 22, 11, 36, 86, 96, 5, 36, 90, 66, 71, 50, 6,
6, 23, 46, 55, 41, 35, 69, 32, 50, 25, 64, 71, 82, 16, 13,
56, 65, 88, 1, 60, 76, 18, 52, 28, 27, 3, 45, 37, 87, 0,
31, 32,45, 25, 31, 59, 91, 28, 83, 78, 28, 4, 33, 40, 72,
48, 45, 44, 22,
0, 0, 1, 3, 4, 5, 6, 6, 7, 11, 11, 13, 15, 16, 18, 18, 20, 22,
22, 23, 23, 25, 25, 27, 27, 28, 28, 28, 31, 31, 32, 32, 32,
33, 35, 36, 36, 37, 37, 40, 41, 43, 44, 44, 45, 45, 45, 46,
46, 48, 48, 50, 50, 52, 54, 54, 55, 56, 56, 59, 59, 59, 60,
63, 63, 64, 65, 65, 66, 67, 69, 69, 71, 71, 72, 72, 76, 77,
78, 78, 80, 81, 82, 82, 82, 82, 83, 84, 86, 87, 87, 88, 88,
90, 91, 91, 91, 95, 96, 97,
tri effectue en 0 millisecondes
1039728793720,1039728793720
System.out.println("tri effectue en " + (tpsFin - tpsDebut) + " millisecondes");
Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis –– Cours JAVA n°2 – p: 9
La classe StringBuffer
 A utiliser si besoin de chaînes dynamiques (modifications, concaténation, …)
int []tab = new int[10000];
for(int i=0; i<tab.length; i++)
tab[i] = (int)(Math.random()*100);
long tpsDebut = System.currentTimeMillis();
StringBuffer sb = new StringBuffer();
for(int i=0; i<tab.length; i++)
sb.append(tab[i]).append(", ");
Le gain de temps pour la création de la chaîne
System.out.println(sb);
représentant un tableau de 10000 entiers est ici de
java.util.Arrays.sort(tab);
sb = new StringBuffer();
for(int i=0; i<tab.length; i++)
sb.append(tab[i]).append(", ");
System.out.println(sb);
long tpsFin = System.currentTimeMillis();
20 sec environ !!!
par rapport au code précédent
(test sur java 1.5, Pentium 2.4 MHz)
System.out.println("tri et affichage effectue en " + (tpsFin - tpsDebut) + " millisecondes");
Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis –– Cours JAVA n°2 – p: 10
Autre fonctions sur les tableaux
 static void arraycopy(Object tabSource, int debutSource,
Object tabDest, int debutDest, int longeur)
 est une méthode statique et native de la classe
System à utiliser pour copier les tableaux.
int []tab2 = new int[100];
System.arraycopy(tab, 0, tab2, 0, 100);
Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis –– Cours JAVA n°2 – p: 11
Vector
 La classe Vector est la plus utilisée. Elle permet de
stocker des objets dans un ensemble de longueur
variable.





add (objet) permet d’ajouter un objet en queue,
get(index) permet de récupérer l’objet positionné à l’index donné,
find() permet de récupérer la position de l’objet,
isEmpty() teste si le vecteur est vide,
size() donne la taille du vecteur,
 toArray() retourne un tableau d’objets contenus dans le vecteur
 La classe ArrayList est l’identique de la classe Vector,
mais n’est pas synchronisée,
elle est donc plus rapide
et à utiliser de préférence
Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis –– Cours JAVA n°2 – p: 12
Quelques classes de java.util
 La classe Stack hérite directement de la classe
Vector et ajoute entre autres les méthodes :
 push(objet) : ajoute un objet en tête ;
 pop() : retire le premier objet ;
 peek() : renvoie une référence au premier objet sans
le retirer ;
 empty() : teste si la pile est vide.
 Une pile peut aussi contenir des objets de
différents types.
Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis –– Cours JAVA n°2 – p: 13
Quelques classes de java.util
 La classe Hashtable peut être vue comme un
dictionnaire composé de deux vecteurs : un vecteur
pour la clé et un vecteur pour l’objet.
 Une table de clés possède les méthodes :
 put(clé, objet) :
 get(clé) :
 containskey(clé) :
 containsvalue(objet)
:
:
 entre autres...
 isEmpty()
Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis –– Cours JAVA n°2 – p: 14
Quelques classes de java.util
 La classe Set définit un ensemble ne pouvant contenir
qu’un exemplaire d’un objet.
 Cette classe dispose, entre autres, des méthodes :
 add(objet) qui
n’ajoute l’objet que s’il n’est pas déjà présent
 contains(objet) ;
 remove(objet) ;
 isEmpty().
Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis –– Cours JAVA n°2 – p: 15
Quelques classes de java.util
 L’interface Enumeration ne contient que deux
méthodes :
: retourne l’objet (à caster) courant
et passe à l’élément suivant,
hasMoreElements() : indique la présence d’au moins
 nextElement()

un élément.
Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis –– Cours JAVA n°2 – p: 16
Quelques classes de java.util
 L’interface Enumeration (suite)
 utilisée surtout pour la lecture des éléments
d’un vecteur :
for(Enumeration e=vecteur.elements();e.hasMoreElements();)
System.out.println((Personne)e.nextElement()) ;
(mais elle est plus longue que get(index))
int taille = vecteur.size();
for(int i = 0; i<taille;i++)
System.out.println((Personne)vecteur.get(i)) ;
 Remarque : elements() est la méthode qui retourne une
énumération à partir du vecteur.
Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis –– Cours JAVA n°2 – p: 17
Trier les éléments d’une ArrayList (1/3)
de la classe Collections permet de
trier une liste d’objets implémentant l’interface Comparable.
 public static void sort (List list)
 si la classe des objets à trier n’implémente pas l’interface
Comparable, il faut alors fournir un Comparator.
 Exemple de tri d’Integer dans une ArrayList :
java.util.ArrayList al = new java.util.ArrayList();
for(int i=0; i<1000; i++)
al.add(new Integer((int)(Math.random()*1000)));
java.util.Collections.sort(al); // car une ArrayList implémente une List
Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis –– Cours JAVA n°2 – p: 18
Trier les éléments d’une ArrayList (2/3)
/**Définition d’une classe implémentant l’interface Comparable : */
class Personne implements Comparable
{
String nom;
private int noSecu;
Personne(){nom = ""; noSecu = 0;}
Personne(String _nom, int _noSecu){nom = _nom; noSecu = _noSecu;}
public String toString()
{
return nom+":"+noSecu;
}
/**retourne –1 si objet<autre, 0 si objet = autre, 1 si objet > autre*/
public int compareTo(Object autre)
{
Personne p = (Personne)autre;
return (nom.compareToIgnoreCase(p.nom));
}
}
Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis –– Cours JAVA n°2 – p: 19
Trier les éléments d’une ArrayList (3/3)
java.util.ArrayList al = new java.util.ArrayList();
for(int i=0; i<10; i++)
al.add(new Personne("nom"+(int)(Math.random()*10), i));
String ch = "";
for(int i=0; i<al.size(); i++) ch = ch + (Personne)al.get(i) + ", ";
System.out.println(ch);
java.util.Collections.sort(al);
ch = "";
for(int i=0; i<al.size(); i++) ch = ch + (Personne)al.get(i) + ", ";
System.out.println(ch);
nom6:0, nom8:1, nom2:2, nom4:3, nom0:4, nom8:5, nom2:6, nom2:7, nom8:8, nom9:9,
nom0:4, nom2:2, nom2:6, nom2:7, nom4:3, nom6:0, nom8:1, nom8:5, nom8:8, nom9:9,
Emmanuel ADAM – Université de Valenciennes et du Hainaut Cambrésis –– Cours JAVA n°2 – p: 20
Téléchargement