Junior
Quelle est la différence entre les interfaces List et Set en Java?
sobes.tech IA
Réponse de l'IA
Les principales différences entre les interfaces List et Set en Java sont les suivantes :
-
Ordre des éléments :
Listconserve l'ordre d'insertion des éléments. Les éléments ont des indices commençant à 0.Setne garantit pas l'ordre des éléments. Certaines implémentations peuvent avoir un ordre défini (par exemple,LinkedHashSet,TreeSet), mais l'interfaceSetne l'exige pas.
-
Doublons :
Listpermet de stocker des éléments en double.Setne permet pas les doublons. Lorsqu'on tente d'ajouter un doublon, l'opération d'ajout est ignorée ou retournefalse(selon l'implémentation et la méthode).
-
Performance :
- Les opérations d'ajout et de suppression au milieu d'un
Listpeuvent être plus lentes (surtout pourArrayList) que dans unSet. - La vérification de la présence d'un élément (
contains) dans unSetbasé sur le hachage (HashSet) est généralement plus rapide (en moyenne O(1)) comparé à unList(en moyenne O(n)). - Les opérations basées sur l'indice (par exemple,
get,set) ne sont disponibles que dansList.
- Les opérations d'ajout et de suppression au milieu d'un
-
Implémentations :
- Implémentations typiques de
List:ArrayList,LinkedList,Vector. - Implémentations typiques de
Set:HashSet,LinkedHashSet,TreeSet.
- Implémentations typiques de
Voici des exemples illustrant les différences :
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class CollectionDifferences {
public static void main(String[] args) {
// List permet les doublons et conserve l'ordre
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Apple"); // Ajout d'un doublon
System.out.println("List : " + list); // Affichera [Apple, Banana, Apple]
System.out.println("List à l'indice 1 : " + list.get(1)); // Accès par indice
// Set ne permet pas les doublons et l'ordre n'est pas garanti (pour HashSet)
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Apple"); // Tentative d'ajout d'un doublon - sera ignorée
System.out.println("Set : " + set); // Affichera quelque chose comme [Apple, Banana] ou [Banana, Apple]
// set.get(1); // Erreur de compilation - pas d'accès par indice
}
}
Tableau comparatif :
| Caractéristique | List | Set |
|---|---|---|
| Ordre | Garanti (ordre d'insertion) | Non garanti (pour HashSet, TreeSet a un ordre trié) |
| Doublons | Autorisés | Non autorisés |
| Accès par indice | Possible (get(int index)) |
Impossible |
| Performance contains() | O(n) en moyenne (pour ArrayList) | O(1) en moyenne (pour HashSet) |
| Implémentations typiques | ArrayList, LinkedList, Vector | HashSet, LinkedHashSet, TreeSet |