Vous êtes sur la page 1sur 10

Vecteurs

Java fournit la classe Vector dans sont package java.util

Un objet de la classe Vector est similaire à un tableau puisqu’il


permet de stocker plusieurs valeurs.

Contrairement aux tableaux, un Vector ne requiert pas la manipulation


d’indices pour gérer ses éléments. Cette gestion se fait à travers les
méthodes de cette classe.

A) Pourquoi ?

1. C'est une classe, donc on peut profiter de


ses méthodes au lieu de tout programmer
comme le cas des tableaux d'objets;

2. Son nombre d'éléments varie dépendant de la


méthode appliquée (ajouter, insérer,
supprimer, . . .);

3. Méthodes assez générales pour des objets de


natures différentes (ajouter un nouvel
élément, chercher un élément, modifier le
contenu d'un élément, supprimer, …).

B) Comment ?

public class Vector <E>


extends AbstractList <E> // sous-classe de …. (notion d’héritage)
implements List <E>, Cloneable, Serializable // notion
d’interface

1. À importer :
import java.util.*;

2. Déclaration et (1 manière de) construction

IFT 1170, été 2009 Chapitre 7 : Vecteurs 102


(par Le Van N., révisé pour JDK 1.5 par M. Reid)
Vector <Cercle> cercle = new Vector<Cercle> ();
Vector<Employe> employe = new Vector<Employe>();
Vector<Pays> pays = new Vector<Pays> ();

On n'a pas déclaré la taille du vecteur,


par contre, depuis JDK 1.5, on doit déclarer le type des éléments.

Avec ces déclarations :


cercle est un vecteur vide (pas d'éléments),
sa taille vaut zéro :
cercle.size() vaut 0

pays est un vecteur vide (d'éléments) sa taille


vaut zéro :
pays.size() vaut 0
etc. . .
3. Ajout d'un nouvel élément :

Cercle c1 = new Cercle(1.5),


c2 = new Cercle(4.2);

1.5
c1
4.2
c2

cercle.addElement(c1);
cercle.addElement(c2);

Après ces 2 ajouts : cercle.size() vaut 2

4. Accès à un élément :

Cercle c = (Cercle) cercle.elementAt(1);

IFT 1170, été 2009 Chapitre 7 : Vecteurs 103


(par Le Van N., révisé pour JDK 1.5 par M. Reid)
La méthode elementAt(k) retourne un objet
(du même type que les éléments) :

Si un a un vecteur "pays" de 125 nations,


l'affectation :

Nation p = pays.elementAt(99);

permet d'affecter à p le 100ième pays du


vecteur. Notez que l'accès via indice
n'est pas permis avec un vecteur :
pays[99] n'est pas valide.

5. Modifier un élément (utile pour le tri)

Supposons qu'on dispose d'un vecteur de 12


cercles.

Cercle nouvCercle = new Cercle(7.7);


cercle.setElementAt(nouvCercle, 6);

7.7
nouvCercle

La deuxième ligne mémorise le nouveau


cercle dans le vecteur à l'indice 6.

6. Insertion un élément :

Supposons qu'on dispose d'un vecteur de 12 cercles.

Cercle nouvCercle = new Cercle(10.4);


cercle.insertElementAt(nouvCercle, 10);

10.4
nouvCercle

Le nouveau cercle prend sa place à

IFT 1170, été 2009 Chapitre 7 : Vecteurs 104


(par Le Van N., révisé pour JDK 1.5 par M. Reid)
l'indice 10 et pousse les deux autres
vers le bas du vecteur. La taille devient
13.

7. Suppression :
public final boolean removeElement (E obj);

Si l'objet est un élément du vecteur :


. supprimer la première occurrence
. déplacer certains éléments vers le
haut
. décrémente la taille du vecteur
. retourne true
Si non :
. retourne false
public final void removeElementAt(int indice);

Supprimer l'élément à l'indice spécifié s'il existe et


faire des ajustements en conséquence.
public final void removeAllElements();

Retirer tous les élements et mettre sa taille à 0

8. Recherche :
public final int indexOf (E obj);

retourne l'indice de la première


occurrence de l’élément trouvé (-1
si non trouvé)
public final int lastIndexOf (E obj);

retourne l'indice de la dernière occurrence de


l’élément trouvé (-1 si non trouvé)
public final boolean contains (E obj);

retourne true si l’élément donné est


un élément de ce vecteur (false
sinon).
9. Conversion en chaîne de caractères :

IFT 1170, été 2009 Chapitre 7 : Vecteurs 105


(par Le Van N., révisé pour JDK 1.5 par M. Reid)
public String toString()
retourne une chaîne représentant le vecteur.

10. Tester si le vecteur est vide :

public boolean isEmpty()

Les informations plus complètes se trouvent au


lien :
http://java.sun.com/j2se/1.5.0/docs/api/java/util/Vector.html

Exemple 1:
import java.util.Vector;

public class Beatles


{
public static void main (String[] args)
{
Vector<String> band = new Vector<String>();

band.addElement ("Paul");
band.addElement ("Pete");
band.addElement ("John");
band.addElement ("George");

System.out.println (band);

band.removeElement ("Pete");

System.out.println (band);
System.out.println ("A la position 1: " + band.elementAt(1));

band.insertElementAt ("Ringo", 2);

System.out.println (band);
System.out.println ("Taille du groupe: " + band.size());
}
}

Efficacité des vecteurs :

Une différence importante entre les tableaux et les vecteurs est que
ces derniers gèrent implicitement leurs taille, celle-ci peut changer
automatiquement leur de l’exécution du programme s’il manque de place
pour un nouvel élément.

Par contre, l’implémentation de la classe Vector utilise


(implicitement) un tableau. Lorsque nous insérons un nouvel élément
ailleurs qu’à la fin, tous ceux qui le suivront seront d’abord décalés,
un à un, d’une position dans le vecteur, ce qui ralenti l’exécution du
programme.

IFT 1170, été 2009 Chapitre 7 : Vecteurs 106


(par Le Van N., révisé pour JDK 1.5 par M. Reid)
Lorsque le traitement à faire demande beaucoup d’insertions et de
suppressions d’éléments, un vecteur risque de s’avérer moins efficace
que, par exemple une liste chaînée.

Exemple 2 :

import java.util.*; /* pour utiliser la classe Vector */

/** classe Vector, informations de base


* Fichier Vecteur0.java et Cercle.java
* Explications : en classe
* De LVN pour IFT 1170
*/
public class Vecteur0
{

static void afficher (Vector<Cercle> c, String message) {


System.out.println(message);
if (c.size() == 0)
System.out.println("Le vecteur est vide");
else {
System.out.println("Le vecteur contient " + c.size() +
" element(s)");
for (int i = 0 ; i < c.size(); i++)
( ( c.elementAt(i)).afficher(" a l'indice " + i);
System.out.println();
}
}

public static void main (String[] args)


{
Vector<Cercle> c = new Vector<Cercle> ();

afficher(c, "Apres l'instruction : Vector c = new Vector(); ");

Cercle c1 = new Cercle(10.2),


c2 = new Cercle(1.7);

c.addElement(c1);
c.addElement(c2);

afficher(c, "Apres avoir ajoute les deux cercles c1 et c2 : ");

Cercle c3 = new Cercle(5.4);


c.insertElementAt(c3, 1);
afficher(c, "Apres avoir insere le cercle c3 a l'indice 1 : ");

( c.firstElement()).afficher(" numero 1 ");

System.out.println("Indice du cercle c3 : " + c.indexOf(c3));

Cercle c4 = new Cercle (44.4);


c.setElementAt(c4, 0);

afficher(c, "Apres avoir remplace l'element a l'indice 0 par c4 : ");

IFT 1170, été 2009 Chapitre 7 : Vecteurs 107


(par Le Van N., révisé pour JDK 1.5 par M. Reid)
c.removeElementAt(1);
afficher(c, "Apres avoir retire l'element a l'indice 1 : ");

}
}

/* Exécution :
Apres l'instruction : Vector c = new Vector();
Le vecteur est vide
Apres avoir ajoute les deux cercles c1 et c2 :
Le vecteur contient 2 element(s)
Informations du cercle a l'indice 0 :
- rayon : 10.2
- perimetre : 64.08849013323177
- surface : 326.851299679482

Informations du cercle a l'indice 1 :


- rayon : 1.7
- perimetre : 10.681415022205297
- surface : 9.0792027688745

Apres avoir insere le cercle c3 a l'indice 1 :


Le vecteur contient 3 element(s)
Informations du cercle a l'indice 0 :
- rayon : 10.2
- perimetre : 64.08849013323177
- surface : 326.851299679482

Informations du cercle a l'indice 1 :


- rayon : 5.4
- perimetre : 33.929200658769766
- surface : 91.60884177867838

Informations du cercle a l'indice 2 :


- rayon : 1.7
- perimetre : 10.681415022205297
- surface : 9.0792027688745

Informations du cercle numero 1 :


- rayon : 10.2
- perimetre : 64.08849013323177
- surface : 326.851299679482

Indice du cercle c3 : 1
Apres avoir remplace l'element a l'indice 0 par c4 :
Le vecteur contient 3 element(s)
Informations du cercle a l'indice 0 :
- rayon : 44.4
- perimetre : 278.9734276387736
- surface : 6193.210093580774

Informations du cercle a l'indice 1 :


- rayon : 5.4
- perimetre : 33.929200658769766

IFT 1170, été 2009 Chapitre 7 : Vecteurs 108


(par Le Van N., révisé pour JDK 1.5 par M. Reid)
- surface : 91.60884177867838

Informations du cercle a l'indice 2 :


- rayon : 1.7
- perimetre : 10.681415022205297
- surface : 9.0792027688745

Apres avoir retire l'element a l'indice 1 :


Le vecteur contient 2 element(s)
Informations du cercle a l'indice 0 :
- rayon : 44.4
- perimetre : 278.9734276387736
- surface : 6193.210093580774

Informations du cercle a l'indice 1 :


- rayon : 1.7
- perimetre : 10.681415022205297
- surface : 9.0792027688745

*/

Extrait du document de Sun sur son site :


http://java.sun.com/j2se/1.5.0/docs/api/java/util/Vector.html

Classe Vector (les vecteurs d’objets)


Ces schémas seront expliqués à compter de la semaine du 03 février
jusqu’à la fin du trimestre.

java.util
Class Vector<E>
java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractList<E>
java.util.Vector<E>
All Implemented Interfaces:
Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, RandomAccess
Direct Known Subclasses:
Stack

Pour IFT 1170, on explique une partie des constructeurs et méthodes utilisées dans notre cours.

Constructor Summary
Vector()
Constructs an empty vector so that its internal data array has size 10 and its standard capacity
increment is zero.

IFT 1170, été 2009 Chapitre 7 : Vecteurs 109


(par Le Van N., révisé pour JDK 1.5 par M. Reid)
Method Summary
boolean add(E o)
Appends the specified element to the end of this Vector.
void add(int index, E element)
Inserts the specified element at the specified position in this Vector.
void addElement(E obj)
Adds the specified component to the end of this vector, increasing its size by
one.
void clear()
Removes all of the elements from this Vector.
boolean contains(Object elem)
Tests if the specified object is a component in this vector.
E elementAt(int index)
Returns the component at the specified index.
boolean equals(Object o)
Compares the specified Object with this Vector for equality.
E firstElement()
Returns the first component (the item at index 0) of this vector.
E get(int index)
Returns the element at the specified position in this Vector.
int indexOf(Object elem)
Searches for the first occurence of the given argument, testing for equality
using the equals method.
int indexOf(Object elem, int index)
Searches for the first occurence of the given argument, beginning the search
at index, and testing for equality using the equals method.
void insertElementAt(E obj, int index)
Inserts the specified object as a component in this vector at the specified
index.
boolean isEmpty()
Tests if this vector has no components.
E lastElement()
Returns the last component of the vector.
int lastIndexOf(Object elem)
Returns the index of the last occurrence of the specified object in this vector.
int lastIndexOf(Object elem, int index)
Searches backwards for the specified object, starting from the specified
index, and returns an index to it.
E remove(int index)
Removes the element at the specified position in this Vector.
boolean remove(Object o)
Removes the first occurrence of the specified element in this Vector If the
Vector does not contain the element, it is unchanged.
void removeAllElements()

IFT 1170, été 2009 Chapitre 7 : Vecteurs 110


(par Le Van N., révisé pour JDK 1.5 par M. Reid)
Removes all components from this vector and sets its size to zero.
boolean removeElement(Object obj)
Removes the first (lowest-indexed) occurrence of the argument from this
vector.
void removeElementAt(int index)
Deletes the component at the specified index.
E set(int index, E element)
Replaces the element at the specified position in this Vector with the
specified element.
void setElementAt(E obj, int index)
Sets the component at the specified index of this vector to be the specified
object.
int size()
Returns the number of components in this vector.
String toString()
Returns a string representation of this Vector, containing the String
representation of each element.

IFT 1170, été 2009 Chapitre 7 : Vecteurs 111


(par Le Van N., révisé pour JDK 1.5 par M. Reid)

Vous aimerez peut-être aussi