Classes
Transcription
Classes
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