• Aucun résultat trouvé

Liste linéaire chaînée avec Java :

N/A
N/A
Protected

Academic year: 2022

Partager "Liste linéaire chaînée avec Java :"

Copied!
1
0
0

Texte intégral

(1)

Liste linéaire chaînée avec Java :

En tenant compte du temps consacré à cette matière (environ deux heures seulement), de la nature de notre cours IFT 1170 qui est très orientée objet, on décide de montrer les listes linéaires chaînées en utilisant la classe prédéfinie LinkedList du Java. En espérant que c’est une bonne occasion aux étudiants du IFT 1170 de revoir les concepts vus en classe à travers les schémas, on va donner des exemples avec la classe LinkedList. Notez que VJ++ (avec la version 1.1 de Java) ne supporte pas LinkedList . Dans les exemples on utilise l’environnement de JDK pour compiler et exécuter.

Sous JDK :

Programme source en JAVA

Liste.java

compilateur

JAVA

javac Liste.java

bytecode Liste.class

La compilation du programme Liste.java pour fabriquer la version en bytecode Liste.class

bytecode

Liste.class

Interpréteur

JAVA = Machine virtuelle Java + Bibliothèque de classes

(API)

java Liste

Résultats (excécution)

du programme

L

L’interprétation du bytecode Liste.java

pour founir des résultats (l’exécution)

(2)

La classe LinkedList du paquet java.util

java.lang.Object |

+-java.util.AbstractCollection |

+-java.util.AbstractList |

+-java.util.AbstractSequentialList |

+-java.util.LinkedList

super classe en Java

AbstractSequentialList

interface

List

interface

Cloneable

interface

Serializable

public class LinkedList extends AbstractSequentialList implements List, Cloneable, Serializable

Pour utiliser la classe LinkedList., on importe le paquet java.util :

import java.util.*;

Constructor Summary : sommaire de constructeurs

LinkedList()

Constructs an empty list : construire une liste linéaire vide.

etc….

Method Summary : résumé de quelques méthodes de gestion d’une liste Ajout d’un élément à une liste :

(3)

void add(int index, Object element)

Inserts the specified element at the specified position in this list.

Insérer un élement à un indice donné de la liste.

boolean add(Object o)

Appends the specified element to the end of this list.

Insérer un objet à la fin de la liste.

void addFirst(Object o)

Inserts the given element at the beginning of this list.

Insérer un objet au début de la liste.

void addLast(Object o)

Appends the given element to the end of this list.

Insérer un objet à la fin de la liste.

Accès à un élément de la liste :

Object get(int index)

Returns the element at the specified position in this list.

Retourner l’élément à un indice spécifique de la liste.

Object getFirst()

Returns the first element in this list.

Retourner le premier élément de la liste.

Object getLast()

Returns the last element in this list.

Retourner le dernier élément de la liste.

La taille de la liste (son nombre d’éléments) : utile pour le parcours

Int size()

Returns the number of elements in this list.

Retourner le nombre d’élements de la liste Modification d'un élément de la liste :

Object set(int index, Object newElem)

Replaces the element at the specified position in this list with the specified element :

Remplacer l’élément à l’indice par un nouvel.

Recherche dans une liste : (basée sur la redéfinition de equals)

boolean contains(Object o)

Returns true if this list contains the specified element.

Retourner VRAI si la liste contient l’objet.

(4)

int indexOf(Object o)

Returns the index in this list of the first occurrence of the specified element, or -1 if the List does not contain this element.

Retourner l’indice de la première occurence de l’objet de la liste ou -1 si la liste ne contient pas l’objet.

int lastIndexOf(Object o)

Returns the index in this list of the last occurrence of the specified element, or -1 if the list does not contain this element.

Retourner l’indice de la dernière occurence de l’objet de la liste ou -1 si la liste ne contient pas l’objet.

Suppression d’un élément de la liste :

Object remove(int index)

Removes the element at the specified position in this list.

Supprimer l’élément à tel indice.

boolean remove(Object o)

Removes the first occurrence of the specified element in this list.

Supprimer l’objet (la première occurrence trouvée).

Object removeFirst()

Removes and returns the first element from this list.

Supprimer et retourner le premier élément de la liste.

Object removeLast()

Removes and returns the last element from this list.

Supprimer et retourner le dernier élément de la liste.

etc. . . etc

Parcourir une liste :

1) Manière simple :

for ( int i = 0 ; i < liste.size() ; i++) {

classe objet = ( . . . conversion . . .) liste.get(i) ;

. . . traiter l’objet . . .

}

(5)

2) Utilisation d’un itérateur (style de C++) :

public interface Iterator

Method Summary

boolea

n hasNext()

Returns true if the iteration has more elements.

(avoir encore d’éléments)

Object next()

Returns the next element in the iteration.

(retourner le prochain élément).

public interface ListIterator extends Iterator

Method Summary : quelques méthodes

boolea

n hasNext()

Returns true if this list iterator has more elements when traversing the list in the forward direction.

Retourner VRAI si l’itérateur a encore d’éléments (suivants).

boolea

n hasPrevious()

Returns true if this list iterator has more elements when traversing the list in the reverse direction.

Retourner VRAI si l’itérateur a encore d’éléments (avants)

Object next()

Returns the next element in the list.

Retourner l’élément suivant de la liste.

Object previous()

Returns the previous element in the list.

Retourner l’élément précédent de la liste.

etc … etc …

a) parcours du premier au dernier élément de la liste:

(6)

ListIterator iterateur = liste.listIterator();

while(iterateur.hasNext())

{ classe objet = ( . . . conversion . . .) iterateur.next() ; . . . traiter l’objet . . .

}

b) parcours du dernier au premier élément de la liste (sans inverse)

ListIterator iterateur = liste.listIterator( liste.size());

while(iterateur.hasPrevious())

{ classe objet = ( . . . conversion . . .) iterateur.previous() ; . . . traiter l’objet . . .

}

Exemple : gestion d’une liste linéaire des diviseurs de 720

/**

* Fichier Liste1.java * À exécuter sous JDK

* (pas sous VJ++ qui provoque l'erreur suivante:

* Nom "LinkedList" non défini (à cause de la version 1.1 du * VJ++)

*

* Démontration d'utilisation de la classe java.util.LinkedList *

* (Voir l'exécution et les notes de cours pour comprendre et * pour les explications supplémentaires)

*

*/

(7)

import java.util.*;

public class Liste1 {

// créer la liste linéaire des diviseurs (Integer) d'un nombre static LinkedList creerListe(int nombre) {

LinkedList uneListe = new LinkedList(); // liste VIDE au début for (int candi = 1 ; candi <= nombre ; candi++)

if (nombre % candi == 0)

uneListe.addLast( new Integer (candi) );

return uneListe;

}

// une manière de parcourir une liste linéaire:

static void afficher(LinkedList liste, String message) { System.out.println("\nContenu " + message);

for (int i = 0 ; i < liste.size() ; i++)

{ int valeur = ((Integer) liste.get(i)).intValue();

System.out.println((i+1) + ")\t" + valeur);

}

System.out.println();

}

// une autre manière de parcourir une liste linéaire dans 2 sens static void afficher(String message, LinkedList liste, int ordre) {

System.out.println("\nContenu " + message);

int rang = 0;

if(ordre == 1){

System.out.println("Du debut a la fin");

ListIterator versAvant = liste.listIterator();

while(versAvant.hasNext())

System.out.print(++rang + ")\t" + versAvant.next()+ "\n");

} else {

System.out.println("En ordre inverse");

ListIterator inverse = liste.listIterator(liste.size());

while(inverse.hasPrevious())

System.out.print(++rang + ")\t" + inverse.previous() + "\n");

}

System.out.println();

}

// démo de qq méthodes fréquemment utilisées pour gérer une liste

(8)

static void demo(LinkedList liste) {

System.out.println("Contenu de la liste de " + liste.size() + " elements :\n" + liste);

System.out.println("\nPremier element : " + liste.getFirst());

System.out.println("Dernier element : " + liste.getLast());

System.out.println("\nResultats de la recherche :\n");

System.out.println(" a) de 15 :\n");

System.out.println(" avec indexOf : " + liste.indexOf(new Integer(15)));

System.out.println(" avec lastIndexOf : " + liste.lastIndexOf(new Integer(15)));

System.out.println(" avec contains : " + liste.contains(new Integer(15)));

System.out.println(" b) de 1000 :\n");

System.out.println(" avec indexOf : " + liste.indexOf(new Integer(1000)));

System.out.println(" avec lastIndexOf : " + liste.lastIndexOf(new Integer(1000)));

System.out.println(" avec contains : " + liste.contains(new Integer(1000)));

liste.addFirst( new Integer(1234) );

liste.addLast ( new Integer(333) );

liste.add(1, new Integer(543));

liste.set(2, new Integer(9999));

System.out.println("Contenu de la liste de " + liste.size() + " elements :\n" + liste);

System.out.println("\nDeuxieme element de la liste : " + liste.get(1));

System.out.println("\nTroisieme element de la liste : " + liste.get(2));

liste.remove(liste.size() - 1);

liste.remove(3);

System.out.println("Contenu de la liste (avec toString) de " + liste.size() + " elements :\n" + liste);

afficher(liste," (avec une maniere de parcourir la liste) :");

afficher(" (avec une autre maniere de parcourir la liste) :", liste, 1);

afficher(" (avec une autre maniere de parcourir la liste) :", liste, 2);

}

public static void main (String[] args) {

LinkedList liste = creerListe(720);

demo(liste);

}

}

/* Exécution sous JDK :

(9)

R:\ListeLineaire>javac Liste1.java R:\ListeLineaire>java Liste1

Contenu de la liste de 30 elements :

[1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 30, 36, 40, 45, 48, 60, 72, 80, 90, 120, 144, 180, 240, 360, 720]

Premier element : 1 Dernier element : 720 Resultats de la recherche : a) de 15 :

avec indexOf : 10 avec lastIndexOf : 10 avec contains : true b) de 1000 :

avec indexOf : -1 avec lastIndexOf : -1 avec contains : false

Contenu de la liste de 33 elements :

[1234, 543, 9999, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 30, 36, 40, 4 5, 48, 60, 72, 80, 90, 120, 144, 180, 240, 360, 720, 333]

Deuxieme element de la liste : 543 Troisieme element de la liste : 9999

Contenu de la liste (avec toString) de 31 elements :

[1234, 543, 9999, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 30, 36, 40, 45, 48, 60, 72, 80, 90, 120, 144, 180, 240, 360, 720]

Contenu (avec une maniere de parcourir la liste) : 1) 1234

2) 543 3) 9999 4) 3 5) 4 6) 5 7) 6 8) 8 9) 9 10) 10 11) 12 12) 15 13) 16 14) 18

(10)

15) 20 16) 24 17) 30 18) 36 19) 40 20) 45 21) 48 22) 60 23) 72 24) 80 25) 90 26) 120 27) 144 28) 180 29) 240 30) 360 31) 720

Contenu (avec une autre maniere de parcourir la liste) : Du debut a la fin

1) 1234 2) 543 3) 9999 4) 3 5) 4 6) 5 7) 6 8) 8 9) 9 10) 10 11) 12 12) 15 13) 16 14) 18 15) 20 16) 24 17) 30 18) 36 19) 40 20) 45 21) 48 22) 60 23) 72 24) 80 25) 90 26) 120 27) 144 28) 180 29) 240 30) 360 31) 720

Contenu (avec une autre maniere de parcourir la liste) :

(11)

En ordre inverse 1) 720 2) 360 3) 240 4) 180 5) 144 6) 120 7) 90 8) 80 9) 72 10) 60 11) 48 12) 45 13) 40 14) 36 15) 30 16) 24 17) 20 18) 18 19) 16 20) 15 21) 12 22) 10 23) 9 24) 8 25) 6 26) 5 27) 4 28) 3 29) 9999 30) 543 31) 1234

*/

(12)

dernier liste

Schéma d’une liste des pays

3

‘5’

“espagne”

“madrid”

505 000 km2 40 millions habitants

‘4’

“australie ”

“canberra”

7 700 000 km2 16 800 000 habitants

‘12’

“panama”

“ panama”

77 000 km2 2 400 000 habitants

premier courant

nbElem

Références

Documents relatifs

For matching purposes, some type of driving system will have to be added for each Toggle Switch Register.' Three methods have been suggested.. One set' of 16

(Digenea, Apocreadiidae) is described from the intestine of a marine fish Stephanolepis hispidus from Brazil, and the genus Schikhobalotrema Skrjabin &amp;

7 So it is timely that in this month’s issue of Canadian Family Physician Dr Vivien Brown (page 1377) reminds us that, while family physi- cians are dedicated

I was puzzled, so I went to the lady with him and said, “Well this is Mark Van der Steen, my colleague with whom I will supervise the exam in auditorium A1.” She

The following approach specifies a default algorithm to be used with the User Friendly Naming approach. It is appropriate to modify this algorithm, and future specifications

Existing information systems such as Gopher, WAIS and World-Wide Web are examined from the point of view of multimedia support, and some interesting hypermedia systems

The ACCESS procedure provides access permission checking on the server, the FSSTAT procedure returns dynamic information about a file system, the FSINFO procedure

The description of command syntax provided by the fields can be used by mail client applications to provide simplified and consistent user access to email distribution