La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

1 Vector, Iterator, LinkedList. 2 Java fournit la classe Vector dans sont package java.util Un objet de la classe Vector est similaire à un tableau puisquil.

Présentations similaires


Présentation au sujet: "1 Vector, Iterator, LinkedList. 2 Java fournit la classe Vector dans sont package java.util Un objet de la classe Vector est similaire à un tableau puisquil."— Transcription de la présentation:

1 1 Vector, Iterator, LinkedList

2 2 Java fournit la classe Vector dans sont package java.util Un objet de la classe Vector est similaire à un tableau puisquil permet de stocker plusieurs valeurs. Contrairement aux tableaux, un Vector ne requiert pas la manipulation dindices pour gérer ses éléments. Cette gestion se fait à travers les méthodes de cette classe.

3 3 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 lors de lexécution du programme sil manque de place pour un nouvel élément. Par contre, limplé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 dabord décalés, un à un, dune position dans le vecteur, ce qui ralenti lexécution du programme. Lorsque le traitement à faire demande beaucoup dinsertions et de suppressions déléments, un vecteur risque de savérer moins efficace que, par exemple une liste chaînée.

4 4 Les informations plus complètes se trouvent au lien : Constructor Summary VectorVector() Constructs an empty vector so that its internal data array has size 10 and its standard capacity increment is zero. VectorVector () Constructs a vector containing the elements of the specified collection, in the order they are returned by the collection's iterator.Collection VectorVector(int initialCapacity) Constructs an empty vector with the specified initial capacity and with its capacity increment equal to zero. VectorVector(int initialCapacity, int capacityIncrement) Constructs an empty vector with the specified initial capacity and capacity increment.

5 5 Vector cercle = new Vector (); Avec ces déclarations : cercle est un vecteur vide (pas d'éléments), sa taille vaut zéro : cercle.size() vaut 0 Ajout d'un nouvel élément : Cercle c1 = new Cercle(1.5), c2 = new Cercle(4.2); cercle.addElement(c1); cercle.addElement(c2); Après ces 2 ajouts : cercle.size() vaut 2

6 6 Accès à un élément : Cercle c = (Cercle) cercle.elementAt(1); 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); La deuxième ligne mémorise le nouveau cercle dans le vecteur à l'indice 6.

7 7 Insertion un élément : Supposons qu'on dispose d'un vecteur de 12 cercles. Cercle nouvCercle = new Cercle(10.4); cercle.insertElementAt(nouvCercle, 10); Le nouveau cercle prend sa place à l'indice 10 et pousse les deux autres vers le bas du vecteur. La taille devient 13.

8 8 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

9 9 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).

10 10 Conversion en chaîne de caractères : public String toString() retourne une chaîne représentant le vecteur. Tester si le vecteur est vide : public boolean isEmpty()

11 11 import java.util.*; public class Vect1{ public static void main(String args[]){ Vector vect = new Vector (5); vect.addElement(new Integer(3)); vect.addElement(new String("Bonjour")); vect.addElement(new Float(3.14)); System.out.println("taille du vecteur : " + vect.size()); System.out.println("capacité du vecteur : " + vect.capacity()); System.out.println(vect); for(int i=0; i " + vect.elementAt(i)); else System.out.println("vect[" + i + "] est null"); if(vect.elementAt(1) != null){ vect.set(1, new Integer(1000)); } System.out.println("après : " + vect); vect.remove(0); System.out.println("après remove : " + vect + " et taille = " + vect.size()); }

12 12 taille du vecteur : 3 capacité du vecteur : 5 [3, Bonjour, 3.14] vect[0] : java.lang.Integer --> 3 vect[1] : java.lang.String --> Bonjour vect[2] : java.lang.Float --> 3.14 après : [3, 1000, 3.14] après remove : [1000, 3.14] et taille = 2

13 13 Autre exemple : public class Cercle { private double rayon ; public Cercle (double rayon) { this.rayon = rayon; } public double perimetre() { return 2 * Math.PI * rayon; } public double surface() { return Math.PI * Math.pow(rayon, 2.0); } public String toString() { return "rayon : " + rayon + ", perimetre = " + String.format("%5.2f",perimetre()) + ", surface = " + String.format("%5.2f",surface()) + "\n"; }

14 14 import java.util.*; /* pour utiliser la classe Vector */ /** classe Vector, informations de base * Fichier Vect2.java et Cercle.java * */ public class Vect2 { static void afficher (Vector 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++) { System.out.print(" a l'indice " + i + ") "); System.out.print(c.elementAt(i)); }

15 15 public static void main (String[] args) { Vector c = new Vector (); afficher(c, "\nApres l'instruction : Vector c = new Vector(); "); Cercle c1 = new Cercle(10.2), c2 = new Cercle(1.7); /* 2 méthodes équivalentes pour insérer à la fin */ c.addElement(c1); c.add(c2); afficher(c, "\nApres avoir ajoute les deux cercles c1 et c2 : "); Cercle c3 = new Cercle(5.4); c.insertElementAt(c3, 1); // c.add(1,c3); /* équivalent à la ligne précédente */ afficher(c, "\nApres avoir insere le cercle c3 a l'indice 1 : "); System.out.print("\n numero 1 "); System.out.println(c.firstElement()); System.out.println("Indice du cercle c3 : " + c.indexOf(c3)); Cercle c4 = new Cercle (44.4); c.setElementAt(c4, 0); // c.set(0,c4); /* équivalent à la ligne précédente */ afficher(c, "\nApres avoir remplace l'element a l'indice 0 par c4 : "); c.removeElementAt(1); // c.remove(1) /* semblable à la ligne précédente */ afficher(c, "\nApres avoir retire l'element a l'indice 1 : "); } // fin main } // fin Vect2

16 16 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) a l'indice 0) rayon : 10.2, perimetre = 64,09, surface = 326,85 a l'indice 1) rayon : 1.7, perimetre = 10,68, surface = 9,08 Apres avoir insere le cercle c3 a l'indice 1 : Le vecteur contient 3 element(s) a l'indice 0) rayon : 10.2, perimetre = 64,09, surface = 326,85 a l'indice 1) rayon : 5.4, perimetre = 33,93, surface = 91,61 a l'indice 2) rayon : 1.7, perimetre = 10,68, surface = 9,08 numero 1 rayon : 10.2, perimetre = 64,09, surface = 326,85 Indice du cercle c3 : 1 Apres avoir remplace l'element a l'indice 0 par c4 : Le vecteur contient 3 element(s) a l'indice 0) rayon : 44.4, perimetre = 278,97, surface = 6193,21 a l'indice 1) rayon : 5.4, perimetre = 33,93, surface = 91,61 a l'indice 2) rayon : 1.7, perimetre = 10,68, surface = 9,08 Apres avoir retire l'element a l'indice 1 : Le vecteur contient 2 element(s) a l'indice 0) rayon : 44.4, perimetre = 278,97, surface = 6193,21 a l'indice 1) rayon : 1.7, perimetre = 10,68, surface = 9,08

17 17 Fichier dobjets et Vector import java.io.*; import java.util.*; class Personne implements Serializable{ private String nom; private int age; Personne(String nom, int age){ this.nom=nom; this.age=age;} public String toString(){ return nom + ", " + age ; } } // fin Personne class Employe extends Personne{ Employe(String nom, int age){ super(nom,age);} public String toString(){ return " "; } } // fin Employe class Cadre extends Personne{ Cadre(String nom, int age){ super(nom,age);} public String toString(){ return " "; } }// fin Cadre

18 18 public class LireEcrireObjet{ public static void main(String [] args) throws Exception{ ObjectOutputStream ficPerson = new ObjectOutputStream ( new FileOutputStream("Personnes.obj")); Vector vPersonnes= new Vector (); // ajout des personnes vPersonnes.add(new Cadre("Durant", 50)); vPersonnes.add(new Employe("Gaston", 33)); // écriture dans fichier ficPerson.writeObject(vPersonnes); ficPerson.close(); ObjectInputStream ficObj = new ObjectInputStream ( new FileInputStream("Personnes.obj")); // lecture du fichier et affichage vPersonnes = (Vector ) ficObj.readObject(); ficPerson.close(); for (int i=0; i < vPersonnes.size(); i++){ System.out.println(vPersonnes.elementAt(i)); } // fin for } // fin main } // fin classe

19 19 Listes chaînées Une liste chaînée est une liste dont chaque élément est relié au suivant par une référence à ce dernier. Une liste chaînée peut être utilisée dans le cadre d'une simulation de pile ou de file, FIFO(First In First Out) ou FILO(First In Last Out). La taille d'une LinkedList n'est pas fixe : on peut ajouter et enlever des éléments selon nos besoins. Nous pouvons aussi remarquer que les LinkedList acceptent tous types d'objets. Pour bien comprendre le principe des listes chaînées, rien de mieux qu'un petit schéma :

20 20

21 21 Chaque élément contient une référence sur son suivant. On remarque que la queue n'a pas de suivant. Son suivant est en fait null. Voici l'exemple d'opérations sur une liste chaînée : List maListe=new LinkedList() ; // on crée notre liste chaînée maListe.add(new Integer(1)) ; // on ajoute l'entier 1 maListe.add(new Float(2.15)) ; // on ajoute le flottant 2.15 à la liste /* On remarque ici que l'entier 1 est la tête de la liste, et que le float est la queue de la liste. */ Integer monEntier=(Integer)maListe.getFirst() ; // on n'oublie pas de faire le cast Float monFloat=(Float)maListe.getLast(); // on n'oublie pas de faire le cast maListe.remove(0) ; // on retire l'entier, le flottant devient la tete

22 22 Les opérations principales sur une liste chaînée sont : add(Object o) : ajoute un objet o en fin de liste addFirst(Object o) : ajoute un objet o en début de liste addLast(Object o) : ajoute un objet o en fin de liste clear() : vide la liste contains(Object o) : renvoie true si la liste contient l'objet o, false sinon. getFirst() et getLast() : renvoie le premier et le dernier élément de la liste sous forme d'Object. Ne pas oublier le cast. removeFirst() et removeLast() : retire le premier et le dernier élément de la liste. size() : renvoie la taille de la liste

23 23 Constructor Summary LinkedListLinkedList() Constructs an empty list. LinkedListLinkedList(Collection c) CollectionE Constructs a list containing the elements of the specified collection, in the order they are returned by the collection's iterator. Method Summary void addFirst(E o) Inserts the given element at the beginning of this list. addFirstE void addLast(E o) Appends the given element to the end of this list. addLastE E element() Retrieves, but does not remove, the head (first element) of this list. element EE getFirst() Returns the first element in this list. getFirst EE getLast() Returns the last element in this list. getLast Boolean offer(E o) Adds the specified element as the tail (last element) of this list.offerE E peek() Retrieves, but does not remove, the head (first element) of this list. Epeek EE poll() Retrieves and removes the head (first element) of this list.poll E remove() Retrieves and removes the head (first element) of this list. Eremove EE removeFirst() Removes and returns the first element from this list. removeFirst EE removeLast() Removes and returns the last element from this list.removeLast

24 24 Si vous devez parcourir la liste, il est préférable dutiliser un itérateur que la position de lélément courant. Exemple : List paie = new LinkedList (); … ListIterator indiceI; //retourne un itérateur placé avant le premier élement. indiceI = paie.listIterator(); while(indiceI.hasNext()) indiceI.next().payer(); Est plus efficace que : List paie = new Vector (); … for(int i=0 ; i


Télécharger ppt "1 Vector, Iterator, LinkedList. 2 Java fournit la classe Vector dans sont package java.util Un objet de la classe Vector est similaire à un tableau puisquil."

Présentations similaires


Annonces Google