🔹 1.
Introduction à la Java Collections Framework
❓ Qu'est-ce que la Java Collections Framework ?
✅ C'est un ensemble de classes et interfaces fournies par Java pour gérer des collections d'objets
de manière efficace (List, Set, Map, Queue, etc.).
❓ Pourquoi utiliser la Java Collections Framework au lieu des tableaux ?
✅ Flexibilité : Les collections peuvent redimensionner dynamiquement.
✅ Performances : Algorithmes optimisés pour les recherches, insertions, suppressions.
✅ Richesse fonctionnelle : Tri, filtrage, opérations sur les éléments, etc.
🔹 2. List, Set, Queue, Map – Différences et usages
❓ Quelle est la différence entre List, Set et Map ?
Collection Caractéristiques
List (ArrayList, LinkedList) Permet les doublons, ordonnée
Set (HashSet, TreeSet) Unicité des éléments, pas d’ordre garanti (sauf TreeSet)
Map (HashMap, TreeMap) Stocke des paires clé-valeur, clés uniques
Queue (PriorityQueue, LinkedList) Structure FIFO ou basée sur des priorités
❓ Quelle est la différence entre ArrayList et LinkedList ?
Caractéristique ArrayList LinkedList
Accès indexé Rapide (O(1)) Lent (O(n))
Insertion/Suppression Lent (O(n)) Rapide (O(1) en début/fin)
Utilisation mémoire Moins d'overhead Plus d’overhead (références supplémentaires)
📌 Quand utiliser quoi ?
ArrayList : Si l'accès rapide par index est prioritaire.
LinkedList : Si des insertions/suppressions fréquentes sont nécessaires.
❓ Quelle est la différence entre HashSet et TreeSet ?
Caractéristique HashSet TreeSet
Trié (ordre naturel ou
Ordre Pas garanti
Comparator)
Performance (add, remove,
O(1) O(log n)
contains)
Comparaison Utilise equals() et Utilise compareTo() ou un
hashCode() Comparator
📌 Quand utiliser quoi ?
HashSet : Pour des performances optimales sans souci d’ordre.
TreeSet : Quand un tri automatique est nécessaire.
❓ Quelle est la différence entre HashMap et TreeMap ?
Caractéristique HashMap TreeMap
Ordre des clés Aucun ordre Trié (ordre naturel ou Comparator)
Performance (put, get, remove) O(1) O(log n)
Utilisation mémoire Moins d’overhead Plus d’overhead (arbre équilibré)
📌 Quand utiliser quoi ?
HashMap : Si l'ordre des clés n'est pas important.
TreeMap : Si on a besoin d'un tri automatique des clés.
🔹 3. Comparaison et égalité dans les collections
❓ Pourquoi est-il important d’implémenter equals() et hashCode() pour les
objets dans une HashSet ou HashMap ?
✅ equals() détermine si deux objets sont égaux.
✅ hashCode() permet un stockage efficace en générant un code unique pour chaque objet.
📌 Si mal implémenté, cela peut entraîner des doublons dans un HashSet ou une mauvaise
récupération dans un HashMap.
❓ Que se passe-t-il si nous utilisons une clé mutable dans un HashMap ?
❌ Problème : Si la clé est modifiée après insertion, elle peut devenir introuvable dans la
HashMap.
✅ Solution : Toujours utiliser des clés immutables (ex : String, Integer).
🔹 4. Thread Safety et Collections
❓ Quelles sont les collections thread-safe en Java ?
✅ Collections synchronisées (via Collections.synchronizedList()...)
✅ Concurrent Collections :
ConcurrentHashMap (meilleure performance que synchronizedMap)
CopyOnWriteArrayList (lecture rapide, écriture lente)
ConcurrentLinkedQueue (file d'attente non bloquante)
❓ Quelle est la différence entre Hashtable et ConcurrentHashMap ?
Caractéristique Hashtable ConcurrentHashMap
Verrouillage Sur toute la table Par segment (meilleure performance)
Performance Mauvaise en multithreading Optimisée pour le multi-threading
Usage recommandé À éviter Préféré en environnement concurrentiel
📌 Quand utiliser quoi ?
Hashtable : Déprécié, utiliser plutôt ConcurrentHashMap.
ConcurrentHashMap : Pour une utilisation concurrente efficace.
🔹 5. Autres questions avancées
❓ Comment trier une List d’objets personnalisés ?
✅ Avec Collections.sort() et Comparable ou Comparator.
class Person implements Comparable<Person> {
String name;
int age;
@Override
public int compareTo(Person p) {
return Integer.compare(this.age, p.age); // Tri par âge croissant
}
}
List<Person> list = new ArrayList<>();
Collections.sort(list); // Utilise compareTo()
✅ Ou avec un Comparator pour une flexibilité accrue.
list.sort(Comparator.comparing(Person::getName));
❓ Comment filtrer et transformer une collection avec les Streams ?
✅ Exemple avec filter() et map().
List<String> names = persons.stream()
.filter(p -> p.getAge() > 18) // Filtre les adultes
.map(Person::getName) // Extrait les noms
.collect(Collectors.toList());
❓ Comment inverser une List en Java ?
✅ Avec Collections.reverse().
Collections.reverse(myList);
✅ Ou avec un Stream.
List<Integer> reversedList = list.stream()
.sorted(Comparator.reverseOrder())
.collect(Collectors.toList());
🔹 Résumé et conseils pour l’entretien
📌 Points essentiels à retenir :
✅ Comprendre les différences entre List, Set, Map, Queue.
✅ Savoir quand utiliser HashMap, TreeMap, HashSet, TreeSet, LinkedList, ArrayList.
✅ Connaître l’importance de equals() et hashCode().
✅ Comprendre les Collections thread-safe et ConcurrentHashMap.
✅ Savoir trier, filtrer et transformer avec Streams API.
The Java Collections Framework is a critical topic for any Java developer interview. Here are some
frequently asked questions with concise answers to help you prepare:
1️⃣ What is the difference between List, Set, and Map?
• List: Ordered, allows duplicates (e.g., ArrayList, LinkedList).
• Set: Unordered, no duplicates (e.g., HashSet, TreeSet).
• Map: Key-value pairs, keys are unique (e.g., HashMap, TreeMap).
2️⃣ How does HashMap work internally?
• HashMap uses a hashing mechanism to store key-value pairs in buckets.
• Keys are hashed using hashCode(), and collisions are resolved using chaining (linked list or red-black
tree).
3️⃣ What is the difference between ArrayList and LinkedList?
• ArrayList: Backed by a dynamic array, faster for random access.
• LinkedList: Doubly linked list, faster for insertions/deletions.
4️⃣ What is the difference between fail-fast and fail-safe iterators?
• Fail-fast: Throws ConcurrentModificationException if the collection is modified during iteration (e.g.,
ArrayList).
• Fail-safe: Works on a copy of the collection, no exception (e.g., CopyOnWriteArrayList).
5️⃣ When to use ConcurrentHashMap over HashMap?
• Use ConcurrentHashMap for thread-safe operations in a multi-threaded environment.