ISSAE – CNAM Liban NFA035: Examen de rattrapage 2019-2020
UE : Programmation Java – Bibliothèques et Patterns : NFA035
Centres : Beyrouth, Baalbek, Tripoli, Bikfaya, Nahr Ibrahim
Examen : Rattrapage
Modalité : Devoir noté (copies écrites à la main)
Date : 22.10.2020
Heures : 18:00h
Durée : 60 minutes
1
ISSAE – CNAM Liban NFA035: Examen de rattrapage 2019-2020
FRANCAIS
EXERCICE 1: Collections et Généricité
Nous voudrions implémenter une HashMap générique (HashMap<k,v>) en utilisant des structures de
données linéaires comme les tableaux et les listes.
Notre HashMap sera formée de deux listes :
La première liste à éléments uniques sera utilisée pour stocker les clés.
La deuxième liste sera utilisée pour stocker les valeurs.
Les deux listes seront implémentées par tableaux.
La liaison entre clé et valeur sera implémentée à travers les indices égaux dans les deux listes.
Une liste implémentée par tableau montrerait comme suit :
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
last 12
Les fonctionnalités principales d’une liste sont les suivantes :
size() : la taille de la liste.
isEmpty() : vérifie si la liste est vide.
contains(…) : vérifie si la liste contient un élément spécifique donné en paramètre.
get(…) : renvoie l’élément qui existe à l’indice donné en paramètre.
add(…) : ajoute à la liste l’élément donné en paramètre
indexOf(…) : renvoie l’indice de l’élément donné en paramètre
realloc() : permet de faire une réallocation dynamique du tableau, c.à.d. étendre la longueur
du tableau d’une valeur constante.
Vous devriez spécifier les paramètres de ces méthodes et le type de retour.
Question 1.
Implémenter les deux listes demandées.
Vous devriez établir un modèle qui ressemble au Java Collection Framework c.à.d. utiliser des
interfaces et des classes abstraites pour grouper les méthodes de la structure à implémenter.
Question 2.
Implementez la HashMap en y incluant les fonctionnalites principales, c.a.d. les methodes
put et get.
2
ISSAE – CNAM Liban NFA035: Examen de rattrapage 2019-2020
ENGLISH
EXERCISE 1: Collections et Generics
We would like to implement a generic HashMap (HashMap<k,v>) using linear data structures such
as arrays and lists.
Our HashMap will be formed of two lists:
The first list with unique elements will be used to store the keys.
The second list will be used to store values (accepts duplicates).
Both lists will be implemented by array.
The link between key and value will be implemented through equal indexes in the two lists.
A list implemented by array looks as follows :
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
last 12
The main fuctionalities of lists are the followings :
size() : number of elements.
isEmpty() : checks if a list contains elements.
contains(…) : checks if a list contains a specific element given in parameter.
get(…) : returns the element that exists a the index given in parameter.
add(…) : adds to the list the element given in parameter.
indexOf(…) : returns the index of the elements given in parameter
realloc() : allows making a dynamic reallocation of the array, i.e. extends the capacity of the
list of a constant value.
You must specify the parameters of these methods and their return type.
Question 1.
Implement these two types of lists.
You must establish a model that is similar to the Java Collection Framework i.e. using interfaces and
abstract classes in order to group the methods of the requested data structure.
Question 2.
Implement the HashMap including its main functionalities, i.e. the methods put and get.
3
ISSAE – CNAM Liban NFA035: Examen de rattrapage 2019-2020
Question 1.
Solution
public interface MList<E> { (2 pts)
final int extension = 10;
public int size();
public boolean isEmpty();
public boolean contains(Object e);
public E get(int i);
public boolean add(E e);
public int indexOf(E e);
public void realloc();
}
public abstract class AbsList<E> implements MList<E> { (7 pts)
E[] elem;
int last;
public AbsList(int n){
elem = (E[]) new Object[n];
last = -1;}
public int size() { return last+1; }
public boolean isEmpty() { return last == -1; }
public boolean contains(Object e){
if(!isEmpty())
for(int i=0; i<elem.length; i++)
if(e.equals(elem[i])) return true;
return false; }
public E get(int p){
if(p>=0 && p<=last) return elem[p];
return null;}
public int indexOf(E e){
if(contains(e))
for(int i=0; i<=last; i++)
if(e.equals(elem[i])) return i;
return -1;}
public void realloc() {
elem = Arrays.copyOf(elem, elem.length+extension);}
}
public class UniqueList<E> extends AbsList<E> { (3 pts)
public UniqueList(int n) { super(n); }
public boolean add(E e){
if(!contains(e)){
if(last == elem.length-1) realloc();
elem[++last] = e;
return true; }
return false;}
}
public class RegularList<E> extends AbsList<E> { (3 pts)
4
ISSAE – CNAM Liban NFA035: Examen de rattrapage 2019-2020
public RegularList(int n) { super(n); }
public boolean add(E e) {
if(last == elem.length-1) realloc();
elem[++last] = e;
return true;}
}
Question 2.
Solution
public class HashMap<K,V> { (5 pts)
UniqueList<K> keys;
RegularList<V> values;
public HashMap(int initialCapacity) {
keys = new UniqueList<K>(initialCapacity);
values = new RegularList<V>(initialCapacity);}
public boolean put(K key, V value){
if(keys.add(key)){
values.add(value);
return true; }
return false; }
public V get(K key){
return keys.contains(key) ? values.get(keys.indexOf(key)) : null;}
}