Programmation Par Objets Structures de données package java.util B. Carré Polytech Lille 1
Tableaux et structures de données Tableaux «Objets» taille fixe type des éléments : primitif (homogène) ou objets (hétérogène) package java.util Structures de données dynamiques JDK 1.1 : Vector, Hashtable, Date, Properties, StringTokenizer,... Ne peuvent contenir que des Object => downcast nécessaire pour la restitution A noter que sur ce point C++ est plus puissant avec ses Templates (classes génériques du genre «Liste de <T>») et sa bibliothèque STL (Standard Templates Library). En attendant les «generic» en Java... B. Carré Polytech Lille 2
Vector : liste d Object (hétérogène) public class Vector implements Cloneable { void addelement(object obj); void insertelementat(object obj, int index) throws ArrayIndexOutOfBoundsException; void removeelement(object obj); void setelementat(object obj, int index) ArrayIndexOutOfBoundsException; boolean contains(object obj); Object elementat(int index) throws ArrayIndexOutOfBoundsException; int indexof(object obj); int size(); boolean isempty(); String tostring(); Enumeration elements();... throws B. Carré Polytech Lille 3
Vector : exemple import java.util.*; public class Circuit { private Vector composants = new Vector(); public void addporte (Porte p) { composants.addelement(p); public void run() { for (int i=0;i<composants.size();i++) { ((Porte)composants.elementAt(i)).run(); public void afficher() { for(int i=0;i<composants.size();i++) ((Porte)composants.elementAt(i)).display(); B. Carré Polytech Lille 4
Vector : exemple // liste de type primitif (entiers) : wrapper import java.util.*; public class IntegerList { private Vector l = new Vector(); public void add(int i) { l.addelement(new Integer(i)); // wrapper public int somme() { int s; for(int i=0;i<l.size();i++) //dewrapper : s=s+((integer)l.elementat(i)).intvalue(); return s; B. Carré Polytech Lille 5
Enumérateur Interface d itération sur les éléments d une structure de données, quelque soit son type (Vector, Hashtable,...) Favoriser l indépendance entre algorithmes et structures de données. Existent en C++ et autres. interface Enumeration { boolean hasmoreelements(); Object nextelement() throws NoSuchElementException; B. Carré Polytech Lille 6
Enumérateur : exemples public class Circuit { public void run() { Enumeration enum = composants.elements(); while (enum.hasmoreelements()) ((Porte)enum.nextElement()).run();... public class IntegerList {... public int somme() { int s; Enumeration enum = l.elements(); while (enum.hasmoreelements()) s=s+((integer)enum.nextelement()).intvalue(); return s;... B. Carré Polytech Lille 7
Table de Hashage Table d association clé-valeur (Object- Object) à chaque objet est associée une valeur de hashage que l on peut obtenir par la méthode hashcode() de Object si les clés sont de type primitif, les wrapper B. Carré Polytech Lille 8
Hashtable class Hashtable extends Dictionary { void put(object key,object value) throws NullPointerException; Object get(object key); boolean contains(object value) throws NullPointerException; boolean containskey(object key); Object remove(object key); int size(); boolean isempty(); String tostring(); Enumeration elements(); Enumeration keys();... B. Carré Polytech Lille 9
Hashtable : exemple public class NonDisponibleException extends Exception{; public class Ouvrage { protected String titre, auteur; protected boolean emprunte; protected int compteur; // nombre d emprunts public Ouvrage(String tit, String aut) { titre=tit; auteur=aut; public void emprunter() throws NonDisponibleException { if (emprunte) throw new NonDisponibleException(); else {emprunte=true; compteur++; public void rendre() {emprunte=false; public int getcompteur() {return compteur; public String tostring() {return titre+ +auteur; B. Carré Polytech Lille 10
Hashtable : exemple (suite) public class Bibliotheque { protected Hashtable ouvrages = new Hashtable(); public void add(string code, Ouvrage o) {ouvrages.put(code,o); public void listing() {// parcours des cles Enumeration codes = ouvrages.keys(); while (codes.hasmoreelements()) { Object code = codes.nextelement(); System.out.println(code+ : +ouvrages.get(code)); public int compteurtotal() {// parcours des elements int total=0; Enumeration enum = ouvrages.elements(); while (enum.hasmoreelements()) total=total+((ouvrage)enum.nextelement()).getcompteur(); return total; public void emprunter(string code) { try {((Ouvrage)ouvrages.get(code)).emprunter(); catch (NullPointerException ex) { System.out.println( l ouvrage +code+ n existe pas ); catch (NonDisponibleException ex) { System.out.println( ouvrage +code+ non disponible ); B. Carré Polytech Lille 11