Tableaux et Collections



Documents pareils
4. Groupement d objets

Programmation Orientée Objet Java

Chapitre 10. Les interfaces Comparable et Comparator 1

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Java 1.5 : principales nouveautés

Java Licence Professionnelle CISII,

Auto-évaluation Programmation en Java

Généralités sur le Langage Java et éléments syntaxiques.

Programmer en JAVA. par Tama

Programmation Par Objets

Package Java.util Classe générique

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Utilisation d objets : String et ArrayList

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Plan du cours. Historique du langage Nouveautés de Java 7

Java Licence professionnelle CISII,

as Architecture des Systèmes d Information

PROGRAMMATION PAR OBJETS

Java c est quoi? Java pourquoi?

Cours 1: Java et les objets

Une introduction à Java

Chapitre V. Les classes : Object, Vector, etc.

Introduction au langage de programmation Java

Corrigé des exercices sur les références

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Généricité. en Java. (polymorphisme paramétrique) Philippe GENOUD UJF Janvier

Structurer ses données : les tableaux. Introduction à la programmation

Initiation à la programmation orientée-objet avec le langage Java

Chapitre VI- La validation de la composition.

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Programmation en Java IUT GEII (MC-II1) 1

Une introduction à la technologie EJB (2/3)

Corrigés des premiers exercices sur les classes

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars


Introduction. Introduction au langage Java. Un livre de Wikilivres.

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

JAVA. Introduction à la programmation objet avec java 1/4. Nadir BOUSSOUKAIA

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Exercices sur les interfaces

Langage Java. Classe de première SI

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Apprendre Java en 154 minutes

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Cours d initiation à la programmation en C++ Johann Cuenin

INITIATION AU LANGAGE JAVA

Introduction au langage C

Cours 1 : La compilation

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

TD/TP PAC - Programmation n 3

La carte à puce. Jean-Philippe Babau

ACTIVITÉ DE PROGRAMMATION

Certificat Big Data - Master MAthématiques

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Java Licence Professionnelle CISII,

Bien programmer. en Java ex. couleur. Avec plus de 50 études de cas et des comparaisons avec C++ et C# Emmanuel Puybaret.

1. Langage de programmation Java

Héritage presque multiple en Java (1/2)

Gestion distribuée (par sockets) de banque en Java

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Algorithmique, Structures de données et langage C

PROJET ALGORITHMIQUE ET PROGRAMMATION II

TD3: tableaux avancées, première classe et chaînes

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Bases de programmation. Cours 5. Structurer les données

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Programmation Orientée Objet

Programmeur. 3 e édition. les Cahiers

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Java - la plateforme

Threads. Threads. USTL routier 1

Programmation par composants (1/3) Programmation par composants (2/3)

Initiation à la Programmation Java

La technologie Java Card TM

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

TD/TP PAC - Programmation n 3

Programmation Par Objets et Langage Java

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Applet pour visualiser les variables «automate» notifiées

INF 321 : mémento de la syntaxe de Java

Conventions d écriture et outils de mise au point

Initiation. àl algorithmique et à la programmation. en C

Recherche dans un tableau

Jacques Lonchamp. Conception. d applications en Java/JEE. Principes, patterns et architectures

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Programmation Bas Niveau

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Principes des langages de programmation INF 321. Eric Goubault

Synchro et Threads Java TM

Transcription:

Tableaux et Collections F. Mallet Frederic.Mallet@unice.fr http://deptinfo.unice.fr/~fmallet/java/gse.html 2011/2012 F. Mallet 4-1

Réutilisation Types génériques Structures de contrôle for-each Structures de données Tableaux Collections ArrayList Tableaux et collections Chapitre IV Objectifs 2011/2012 F. Mallet 2

Ensemble ordonnés d éléments Tableaux Accès (lecture/écriture) en temps constant Type unique choisi à la déclaration Type primitif Classe (polymorphisme) Longueur statique choisie à la construction Les tableaux sont des objets Tableaux de tableaux ( matrice) 2011/2012 F. Mallet 3

Tableaux : syntaxe Déclaration int[] t1; ou int t1[]; Compteur[] t2; Construction du tableau t1 = new int[10]; t2 = new Compteur[5]; Affectation de tableaux Compteur[] t3 = t2; Longueur t3.length 5 (référence) (pas de ses éléments) (pas de copie globale) (statique) 2011/2012 F. Mallet 4

Lecture ou écriture t1[0] = 24; Tableaux et collections t2[1] = new Compteur(); Indice: accès aux éléments t2[0] = new Compteur(); t2[2] = new CompteurModulo(12); t2[4] = t2[2]; // copie de référence 2011/2012 F. Mallet 5

ArrayIndexOutOfBoundsException A chaque accès (lecture/écriture) Les bornes sont vérifiées => Pas d accès non autorisé à la mémoire Example int[] t = new int[5]; t[-1] => ArrayIndexOutOfBoundsException -1<0 t[5] => ArrayIndexOutOfBoundsException 5>=5 2011/2012 F. Mallet 6

Compteur[] tab; Itération: for Tableaux et collections Parcourir les éléments for (int i = 0; i<tab.length; i++) tab[i].incrementer(); Itération: for-each for (Compteur c : tab) c.incrementer(); 2011/2012 F. Mallet 7

Tableaux à plusieurs dimensions Déclaration int[][] t4; // tableau de tableaux d entiers Construction du tableau t4 = new int[5][]; // 5 tableaux d entiers Utilisation t4[0] = t1; t4[1] = new int[3]; // copie de références Remarque t4.length 5 t4[0].length 10 t4[1].length 3 2011/2012 F. Mallet 8

Paramètres variables Operation binaire interface IOpBinaire{ int calcule(int v1, int v2); class Addition implements IOpBinaire { int calcule(int v1, int v2){ return v1+v2; Opération N-aire interface IOpNaire{ int calcule(int[] valeurs); class Add implements IOpNaire { int calcule(int[] valeurs){ int somme = 0; for(int v : valeurs) somme += v; return somme; new Addition().calcule(5, 12); new Add().calcule(new int[]{5,12); 2011/2012 F. Mallet 9

Paramètres variables Operation binaire interface IOpBinaire{ int calcule(int v1, int v2); class Addition implements IOpBinaire { int calcule(int v1, int v2){ return v1+v2; Opération N-aire interface IOpNaire{ int calcule(int valeurs); class Add implements IOpNaire { int calcule(int valeurs){ int somme = 0; for(int v : valeurs) somme += v; return somme; new Addition().calcule(5, 12); new Add().calcule(5,12,40,-5); 2011/2012 F. Mallet 10

Classe utilitaire : java.util.arrays Manipulations courantes de tableaux Recherche: Copy: Comparaison: Remplissage: Trie: Affichage: int binarysearch(t[] tab, T val); T[] copyof(t[] tab, int newlength); boolean equals(t[] t1, T[] t2); void fill(t[] tab, T val); void sort(t[] tab) String tostring(t[] tab); Remplacer T selon le type boolean, char, byte, short, int, long, float, double, Object 2011/2012 F. Mallet 11

java.util.collection Groupe d éléments capacité extensible taille dynamique Les collections sont des objets Différentes interfaces Ensemble Liste Ensemble ordonné, accès par indice java.util.set java.util.list Files (double sens) Table association (clé/valeur) java.util.queue (Deque) java.util.map 2011/2012 F. Mallet 12

Classes concrètes Ensemble java.util.set java.util.sortedset Table de hachage : java.util.hashset Arbre balancé : java.util.treeset Hachage + liste chaînée : java.util.linkedhashset Liste java.util.list Tableau à capacité variable : java.util.arraylist Liste chaînée : java.util.linkedlist 2011/2012 F. Mallet 13

Classes concrètes File java.util.queue java.util.deque Tableau à capacité variable : java.util.arraydeque Liste chaînée : java.util.linkedlist Table d association java.util.map,java.util.sortedmap Table de hachage : java.util.hashmap Arbre balancé : java.util.treemap Hachage + liste chaînée : java.util.linkedhashmap 2011/2012 F. Mallet 14

Collections : syntaxe Déclaration java.util.arraylist liste1; (référence) Construction d une liste t1 = new java.util.arraylist(); Affectation de collections java.util.arraylist liste2 = liste1; (pas de ses éléments) (pas de copie globale) Taille liste1.size() 0 (dynamique) 2011/2012 F. Mallet 15

Ajout liste1.add(new Compteur()); liste1.add(new ComplexeCartesien(0,1)); Opérations Accès en lecture (par indice) Object o1 = liste1.get(0); ((Compteur)o1).incrementer(); Object o2 = liste1.get(1); ((Compteur)o2).incrementer(); ClassCastException Accès en écriture (par indice) liste1.set(0, new CompteurRapide(o1, 10)); liste1.set(1, o1); 2011/2012 F. Mallet 16

Classes regroupées par thèmes java.util, java.awt, java.lang, La directive import Avant le bloc de déclaration de classe Example: import java.util.arraylist; class Toto { ArrayList liste1 = new ArrayList(); Paquetage 2011/2012 F. Mallet 17

Collections génériques : syntaxe Déclaration ArrayList<ICompteur> compteurs; (référence) Construction compteurs = new ArrayList<ICompteur>(); Ajout compteurs.add(new Compteur()); compteurs.add(new ComplexeCartesien(0,1)); Accès en lecture (par indice) ICompteur c1 = compteurs.get(0); c1.incrementer(); ICompteur c 2011/2012 F. Mallet 18

Parcours des éléments ArrayList compteurs = new ArrayList(); Par indice (seulement pour les listes) for(int i = 0; i<compteurs.size(); i++) { ICompteur c = (ICompteur)compteurs.get(i); c.incrementer(); For-each : itérateurs for(object c : compteurs) { ((ICompteur)c).incrementer(); 2011/2012 F. Mallet 19

ArrayList<ICompteur> compteurs; Parcours des éléments Par indice (seulement pour les listes) for(int i = 0; i<compteurs.size(); i++) { ICompteur c = compteurs.get(i); c.incrementer(); For-each : itérateurs for(icompteur c : compteurs) { c.incrementer(); 2011/2012 F. Mallet 20

Parcours des éléments Interface java.util.iterator interface Iterator<T> { boolean hasnext(); T next(); void remove(); Usage Collection<ICompteur> compteurs = ; Iterator<ICompteur> it = compteurs.iterator(); while(it.hasnext()) { ICompteur c = it.next(); c.incrementer(); 2011/2012 F. Mallet 21

Avec les types primitifs? ArrayList<int> listeentiers; ArrayList<Integer> listeentiers; Ajout d éléments listeentiers.add(new Integer(12)); listeentiers.add(12); Lecture Integer Auto (un)boxing int v = listeentiers.get(0).intvalue(); int v = listeentiers.get(0); Auto boxing Auto unboxing 2011/2012 F. Mallet 22

Classe utilitaire : java.util.collections Manipulations courantes de tableaux Recherche: int binarysearch(list<t> li, T val); T min(collection<t> c); Copy: T max(collection<t> c); void copy(list<t> l1, List<T> l2); Comparaison: boolean disjoint(list<t> l1, List<T> l2); Remplissage: void fill(list<t> li, T val); Divers: Trie: void replaceall(list<t> li, T old, T new); void reverse(list<t> li); void rotate(list<t> li, int distance); void shuffle(list<t> li); void sort(list<t> li) 2011/2012 F. Mallet 23

Collections: JDK 1.1 JDK 1.1 java.util.vector => java.util.arraylist java.util.enumeration => java.util.iterator java.util.hashtable => java.util.hashmap Thread-safe List<T> Collections.synchronizedList(List<T> l) Types génériques Java 5(JDK 1.5) 2011/2012 F. Mallet 24