Chapitre 3 Flashcards
On peut contenir des primitives dans une ArrayList V/F ?
Faux, ArrayList contient des objets
Combien de façon il y a pour implémenter une interface générique ?
3 façons :
- spécifier le type du generics dans la classe : class ShippableRobot implements Shippable<Robot></Robot>
- créer une classe générique et laisser l’appelant de choisir le type du générique : class ShippableAbstractCrate<u> implements Shippable<u></u></u>
- ne pas utiliser de generic et de mettre le type objet dans la méthode de la classe
Voir page 112-113 pour plus d’explications
Montre moi une déclaration de type générique sur une méthode.
public static <T> Crate<T> ship(T t) {
...
}</T></T>
Comment appeler une méthode générique ?
Deux façons :
- implicitement : on appelle normalement la méthode avec les paramètres et le compilateur saura quel type
- explicitement : MyClass.<String>method("package");</String>
C’est quoi du legacy code ? Montre moi un exemple
Du legacy code c’est du vieux code.
Par exemple c’est du code qui n’utilise pas les generics (List unicorns = new ArrayList();)
Que se passe t’il quand on ajoute un primitif à une List ?
Java l’autoboxe en son Wrapper !!!! Car une List prends des Objects et pas des primitives
Explique le principe de Unbounded Wildcards
- C’est quand tu mets ? dans les generics pour dire que tu peux avoir n’importe quelle type dans un generic
Tu ne peux pas faire List<Integer> numbers = new ArrayList<>();
List<object> objects = numbers; // ne compile pas</object></Integer>
Le compilateur nous protège car on pourrait ajouter une String par la suite
Est ce qu’on peut faire ?
ArrayList<Number> list = new ArrayList<Integer>()</Integer></Number>
Non, pour nous protéger d’assigner une liste de Number dans une liste d’Objet
Si j’ai une méthode qui prend une List<object> est ce que je peux passer une list<String> ?</String></object>
Non, avec les génériques ont doit avoir un exact match
Dans les méthodes de certaines collections, qu’est ce que fait :
- push()
- offer()
- add()
- peek()
- pop()
- poll()
- push() va ajouter l’élément à l’avant de la queue
- offer() va ajouter un élément à l’arrière de la queue (renvoie false en cas d’erreur)
- add() va ajouter un élément à l’arrière de la queue (renvoie une exception en cas d’erreur)
- peek() retourne l’élément à l’arrière de la queue sans le retirer
- pop() retourne l’élément a l’arrière de la queue et la supprime (renvoie une exception en cas d’erreur)
- poll() retourne l’élément à l’arrière de la queue et la supprime (renvoie false en cas d’erreur)
Quels sont les implémentations de List ?
- ArrayList
- LinkedList
- Vector
- Stack
Que peut ajouter un TreeSet ?
TreeSet peut ajouter des objets qui implemente l’interface Comparable
Peut on mettre l’opérateur diamant vide lors de la déclaration de la classe ?
Non, interdit de le laisser vide ou avec ?
Donne moi les méthodes de l’interface Map
- put()
Quelles sont les classes qui héritent de Collection ?
List
Set
Queue
Quelles sont les classes qui font partie du framework “Java Collections” ?
List
Set
Queue
Map
Donne moi les méthodes communes de Collection
add()
remove()
isEmpty()
size()
clear()
contains()
Qu’est ce qu’une List ?
C’est une collection ordonné (index) d’éléments qui autorise les duplicatas.
Qu’est ce qu’un set ?
C’est une collection non ordonné qui n’autorise pas les duplicatas.
Qu’est ce qu’une Queue ?
C’est une collection ordonné d’une certaine façon pour être process. (First-in first-out)
Qu’est ce qu’une Map ?
Une Map est une collection qui mappe des clés/valeurs sans pouvoir avoir deux clés dupliqués
Quand est ce qu’on a besoin d’une List ?
Quand on a besoin :
- de stocker des objets dupliqués
- d’insérer et de retrouver des objets avec un index
Qu’est ce qu’une ArrayList ?
Quels sont les avantages ?
Quels sont les inconvénients ?
Quand est ce que c’est un bon choix ?
- C’est un tableau resizable.
- On peut accéder à un élément en un temps constant.
- L’ajout et la suppression sont plus lent.
- Quand on lit plus qu’on modifie
Qu’est ce qu’une LinkedList ?
Quels sont les avantages ?
Quels sont les inconvénients ?
Quand est ce qu’il faut les utilisés ?
- C’est une collection qui implémente List et Queue
- On peut accéder, ajouter, supprimer au début ou à la fin de la liste en un temps constant
- Faire la même chose avec un index prends un temps linéaire
- Les Linked List sont un bon choix quand elle sont utilisés en tant que Queue
Quels sont les deux anciennes implémentation de List ?
Vector et Stack
Quels sont les méthodes de List ?
void add(E élément)
void add(int index, E élément)
E get(int index)
int indexOf(Object o)
int lastIndexOf(Object o)
void remove(int index)
E set(int index, E e)
A quel package appartiennent les classes Comparable et Comparator ?
Comparable : java.lang
Comparator : java.util
Quel est le bénéfice de HashSet ?
Ajouter et checker si un élément est dans le set prends un temps constant
Quels sont les méthodes que l’interface Set ajoute à Collection ?
Aucune (aucune qu’on devrait savoir pour l’examen)
Explique moi comment se passe la recherche dans un HashSet ?
Java va utiliser le hashcode de l’élément pour retrouver le bucket dans lequel il a été ajouté puis il va utiliser la méthode equals pour trouver l’élément précis à l’intérieur du bucket
Quelle classe implemente l’interface NavigableSet ?
TreeSet
Quelles sont les méthodes que doit implémenté une classe qui implemente l’interface NavigableSet ?
- E lower(E e) : retourne l’élément le plus grand qui est strictement inférieur à l’élément passé en paramètre
- E floor(E e) : pareil mais inférieur ou egale
- E ceiling(E e) : retourne l’élément le plus petit qui est supérieur ou égale à l’élément passé en paramètre
- E higher(E e) : pareil mais strictement supérieur
Quelles structure de données n’accepte pas des keys ou des valeurs null ?
- TreeMap (pas de null pour les keys)
- Hashtable (pas de null pour les keys ou les valeurs)
- TreeSet (pas de null)
- ArrayDeque (pas de null car poll utilise null pour dire que la collection est vide)