transparents

Transcription

transparents
interface List
public interface List extends Collection {
// Positional Access
Object get(int index);
Object set(int index, Object element);
void add(int index, Object element);
Object remove(int index);
abstract boolean addAll(int index, Collection c);
// Optional
// Optional
// Optional
// Optional
// Search
int indexOf(Object o);
int lastIndexOf(Object o);
// Iteration
ListIterator listIterator();
ListIterator listIterator(int index);
// Range-view
List subList(int from, int to);
}
List : implémentations
ArrayList
• maintenue dans un tableau
• l'accès à un élément par son indice RAPIDE
• insertion LENTE (surtout si elle a lieu au début de la liste)
LinkedList
• formée de cellules liées par des références
• insertion d'éléments RAPIDE
• l'accès à un élément par son indice LENT
• intéressante si on compte effectuer beaucoup d'insertions et de suppression
Vector
• similaire à ArrayList
• utilisé dans l'API 1.0 et 1.1
import java.util.*;
import java.util.*;
class Cat {
private int catNumber;
Cat(int i) { catNumber = i; }
void print() {
System.out.println("Cat #" + catNumber);
}
}
// classes Cat et Dog comme dans l'exemple
précédent
class Dog {
private int dogNumber;
Dog(int i) { dogNumber = i; }
void print() {
System.out.println("Dog #" + dogNumber);
}
}
class CatList {
private ArrayList list = new ArrayList();
public void add(Cat c){
list.add(c);
}
public Cat get(int index){
return ((Cat)list.get(index));
}
public int size(){
return (list.size());
}
}
public class CatsAndDogs {
public class CatsAndDogs2 {
public static void main(String[] args) {
public static void main(String[] args) {
ArrayList cats = new ArrayList();
CatList cats = new CatList();
for(int i = 0; i < 7; i++){
cats.add(new Cat(i));
}
cats.add(new Dog(7));
for(int i = 0; i < 7; i++){
cats.add(new Cat(i));
}
cats.add(new Dog(7));
// erreur détectée pendant la compilation
for(int i = 0; i < cats.size(); i++){
((Cat)cats.get(i)).print();
//exception lors de l'exécution
}
for(int i = 0; i < cats.size(); i++){
((Cat)cats.get(i)).print();
}
}
}
}
}
Pile (Stack) avec une LinkedList
import java.util.*;
public class Pile {
private LinkedList l = new LinkedList();
public void ajouter(Object o){
l.addFirst(o);
}
public Object retirer(){
return l.removeFirst();
}
public Object sommet(){
return l.getFirst();
}
public static void main(String[] args){
Pile p = new Pile();
p.ajouter(…);
…
}
}
File (Queue) avec une LinkedList
import java.util.*;
public class Queue {
private LinkedList l = new LinkedList();
public void ajouter(Object o){
l.addFirst(o);
}
public Object retirer(){
return l.removeLast();
}
public boolean estVide(){
return l.isEmpty();
}
public static void main(String[] args){
Queue q = new Queue();
q.ajouter(…);
…
}
}
Interface : Set
public interface Set {
// Basic Operations
int size();
boolean isEmpty();
boolean contains(Object element);
boolean add(Object element);
boolean remove(Object element);
Iterator iterator();
// Bulk Operations
boolean containsAll(Collection c);
boolean addAll(Collection c);
boolean removeAll(Collection c);
boolean retainAll(Collection c);
void clear();
// Optional
// Optional
// Optional
// Optional
// Optional
// Optional
// Array Operations
Object[] toArray();
Object[] toArray(Object a[]);
}
Set : implémentations
HashSet
• implantation par table de hachage
• ajout d'élément RAPIDE
• test d'appartenance très rapides
TreeSet
• les éléments sont placés dans un arbre de recherche binaire équilibré
• les éléments sont triés
import java.util.*;
public class TrouveDoublons {
public static void main(String args[]) {
Set s = new HashSet();
for (int i=0; i<args.length; i++){
if (!s.add(args[i])) System.out.println("Doublon :" +
args[i]); }
System.out.println(s.size()+" mots differents : "+s);
}
}
Set : implémentations
java TrouveDoublons salut bonjour tcho tcho hello
⇒ Doublon : tcho
⇒ mots differents : [tcho, hello, salut, bonjour]
si on utilise un TreeSet
⇒ Doublon : tcho
⇒ mots differents : [bonjour, hello, salut, tcho]
Opérations sur les ensembles
s1.containsAll(s2):
teste l'inclusion de s2 dans s1
s1.addAll(s2)
union de s1 et s2
s1.retainAll(s2)
intersection de s1 et s2
s1.removeAll(s2)
différence entre s1 et s2
s1.removeAll(s2) ne donne pas le même résultat que s2.removeAll(s1)
Pour effectuer ces opérations sans destruction, utiliser un ensemble supplémentaire
exemple :
Set union = new HashSet(s1);
union.add(s2);
import java.util.*;
public class TrouveDoublons2 {
public static void main(String args[]) {
Set uniques = new HashSet();
Set doublons = new HashSet();
for (int i=0; i<args.length; i++){
if (!uniques.add(args[i])){
doublons.add(args[i]);
}
}
uniques.removeAll(doublons); // Destructive set-difference
System.out.println("Mots uniques : " + uniques);
System.out.println("Doublons : " + doublons);
}
}
java TrouveDoublons2 salut bonjour tcho tcho hello
Mots uniques : [hello, salut, bonjour]
Doublons : [tcho]
Interface : Map
public interface Map {
// Basic Operations
Object put(Object key, Object value);
Object get(Object key);
Object remove(Object key);
boolean containsKey(Object key);
boolean containsValue(Object value);
int size();
boolean isEmpty();
// Bulk Operations
void putAll(Map t);
void clear();
// Collection Views
public Set keySet();
public Collection values();
public Set entrySet();
// Interface for entrySet elements
public interface Entry {
Object getKey();
Object getValue();
Object setValue(Object value);
}
}
Map : implémentations
HashMap
• implantation par table de hachage
• RAPIDE
TreeMap
• arbre de recherche binaire équilibré
• trié
Générer la table de fréquence des mots en input
import java.util.*;
public class Freq {
private static final Integer ONE = new Integer(1);
public static void main(String args[]) {
Map m = new HashMap();
// Initialize frequency table from command line
for (int i=0; i<args.length; i++) {
Integer freq = (Integer) m.get(args[i]);
m.put(args[i], (freq==null ? ONE : new
Integer(freq.intValue() + 1)));
}
System.out.println(m.size()+" distinct words detected:");
System.out.println(m);
}
}
Générer la table de fréquence des mots en input
java Freq if it is to be it is up to me to delegate
8 distinct words detected:
{up=1, delegate=1, it=2, me=1, be=1, is=2, if=1, to=3}
avec un TreeMap
{be=1, delegate=1, if=1, is=2, it=2, to=3, up=1}
Attention aux types d'objets stockés !
HashSet et HashMap (pour les clés/keys)
⇒ si vous utilisez une classe que vous avez créée vous mêmes, il faut implémenter les
méthodes hashCode() et equals()
TreeSet et TreeMap
⇒ cf comparator dans tableaux
La classe Collections
(similaire à la classe Arrays)
fournit des méthodes pour :
•
•
•
•
•
•
•
trier (sort)
mélanger (schuffle)
inverser l'ordre des éléments (reverse)
remplir (fill)
copier (copy)
rechercher un élément (binarySearch)
trouver les valeurs extrêmes (min, max)
! Certaines de ces méthodes ne peuvent être utilisées que sur des Collections de type liste.
import java.util.*;
public class Donne {
public static List distribueMain(List jeuCartes, int n) {
int nbTotalCartes = jeuCartes.size();
List mmainVue = jeuCartes.subList(nbTotalCartes-n,
nbTotalCartes);
List mmain = new ArrayList(mmainVue);
mmainVue.clear();
return mmain;
}
public static void main(String args[]) {
int nombreMains = Integer.parseInt(args[0]);
int cartesParMain = Integer.parseInt(args[1]);
// jeu de 52 cartes
String[] couleurs = new String[] {"trefle", "coeur",
"carreau", "pique"};
String[] numeros = new String[]
{"as","2","3","4","5","6","7","8","9","10","vallet",
"reine","roi"};
List jeuCartes = new ArrayList();
for (int i=0; i<couleurs.length; i++){
for (int j=0; j<numeros.length; j++){
jeuCartes.add(numeros[j] + " de " + couleurs[i]);
}
}
Collections.shuffle(jeuCartes);
for (int i=0; i<nombreMains; i++){
System.out.println(distribueMain(jeuCartes,
cartesParMain));
}
}
}
java Donne 4 3
[4 de pique, 9 de
[2 de pique, 8 de
[vallet de coeur,
[roi de trefle, 5
trefle, vallet de pique]
trefle, 3 de carreau]
reine de trefle, roi de pique]
de trefle, 10 de trefle]

Documents pareils

•Collection Collection (conteneur) est un objet qui regroupe

•Collection Collection (conteneur) est un objet qui regroupe les mêmes associations clé/valeur Implémentations HashMap HashTable

Plus en détail

•Collections

•Collections •add(indice,valeur):ajouter valeur à l’indice; les autres sont repoussés de 1 •size() •set(index, valeur), get(indice) •remove(indice), clear() •boolean remove(Object element) supprimer celui du pl...

Plus en détail