Cadre de collections Java
Bien avant Java 2, Java proposait des classes ad hoc. Par exemple : les classes Dictionary, Vector, Stack et Properties sont utilisées pour stocker et manipuler des groupes d'objets.
Bien que ces cours soient très utiles, il leur manque un thème central et fédérateur. Pour cette raison, la façon dont vous utilisez la classe Vector est très différente de la façon dont vous utilisez la classe Properties.
Le cadre de collecte est conçu pour répondre aux objectifs suivants.
Le framework doit être performant. La mise en œuvre des collections de base (tableaux dynamiques, listes chaînées, arbres, tables de hachage) doit également être efficace.
Le cadre permet à différents types de collections de fonctionner de manière similaire avec un degré élevé d'interopérabilité.
Les extensions et adaptations d’une collection doivent être simples.
A cette fin, l'ensemble du framework de collection est conçu autour d'un ensemble d'interfaces standards. Vous pouvez directement utiliser les implémentations standards de ces interfaces, telles que LinkedList, HashSet et TreeSet, etc. De plus, vous pouvez également implémenter vos propres collections via ces interfaces.
Le framework de collection est un framework unifié pour représenter et manipuler les collections. Tous les frameworks de collection contiennent les éléments suivants :
Interface : est un type de données abstrait qui représente une collection. Les interfaces permettent à une collection de manipuler indépendamment les détails de sa représentation. Dans les langages orientés objet, les interfaces forment généralement une hiérarchie.
Implémentation (classe) : est l'implémentation spécifique de l'interface de collection. Ce sont essentiellement des structures de données réutilisables.
Algorithmes : sont des méthodes dans les objets qui implémentent l'interface de collection pour effectuer certains calculs utiles, tels que la recherche et le tri. Ces algorithmes sont dits polymorphes car une même méthode peut avoir différentes implémentations sur des interfaces similaires.
En plus des collections, le framework définit également plusieurs interfaces et classes Map. La carte stocke les paires clé/valeur. Bien que les cartes ne soient pas des collections, elles sont entièrement intégrées aux collections.
Interface de collection
Le framework de collection définit certaines interfaces. Cette section donne un aperçu de chaque interface :
序号 | 接口描述 |
---|---|
1 | Collection 接口 允许你使用一组对象,是Collection层次结构的根接口。 |
2 | List 接口 继承于Collection和一个 List实例存储一个有序集合的元素。 |
3 | Set 继承于 Collection,是一个不包含重复元素的集合。 |
4 | SortedSet 继承于Set保存有序的集合。 |
5 | Map 将唯一的键映射到值。 |
6 | Map.Entry 描述在一个Map中的一个元素(键/值对)。是一个Map的内部类。 |
7 | SortedMap 继承于Map,使Key保持在升序排列。 |
8 | Enumeration 这是一个传统的接口和定义的方法,通过它可以枚举(一次获得一个)对象集合中的元素。这个传统接口已被迭代器取代。 |
Classes de collection
Java fournit un ensemble de classes de collection standard qui implémentent l'interface Collection. Certaines d'entre elles sont des classes concrètes qui peuvent être utilisées directement, tandis que d'autres sont des classes abstraites qui fournissent une implémentation partielle de l'interface.
Les classes de collecte standards sont résumées dans le tableau suivant :
序号 | 类描述 |
---|---|
1 | AbstractCollection 实现了大部分的集合接口。 |
2 | AbstractList 继承于AbstractCollection 并且实现了大部分List接口。 |
3 | AbstractSequentialList 继承于 AbstractList ,提供了对数据元素的链式访问而不是随机访问。 |
4 | LinkedList 继承于 AbstractSequentialList,实现了一个链表。 |
5 | ArrayList 通过继承AbstractList,实现动态数组。 |
6 | AbstractSet 继承于AbstractCollection 并且实现了大部分Set接口。 |
7 | HashSet 继承了AbstractSet,并且使用一个哈希表。 |
8 | LinkedHashSet 具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。 |
9 | TreeSet 继承于AbstractSet,使用元素的自然顺序对元素进行排序. |
10 | AbstractMap 实现了大部分的Map接口。 |
11 | HashMap HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。 HashMap 继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。 |
12 | TreeMap 继承了AbstractMap,并且使用一颗树。 |
13 | WeakHashMap 继承AbstractMap类,使用弱密钥的哈希表。 |
14 | LinkedHashMap 继承于HashMap,使用元素的自然顺序对元素进行排序. |
15 | IdentityHashMap 继承AbstractMap类,比较文档时使用引用相等。 |
Dans le didacticiel précédent, cela a été abordé à travers les classes définies dans le package java.util comme suit :
序号 | 类描述 |
---|---|
1 | Vector Vector类实现了一个动态数组。和ArrayList和相似,但是两者是不同的。 |
2 | Stack 栈是Vector的一个子类,它实现了一个标准的后进先出的栈。 |
3 | Dictionary Dictionary 类是一个抽象类,用来存储键/值对,作用和Map类相似。 |
4 | Hashtable Hashtable是原始的java.util的一部分, 是一个Dictionary具体的实现 。 |
5 | Properties Properties 继承于 Hashtable.表示一个持久的属性集.属性列表中每个键及其对应值都是一个字符串。 |
6 | BitSet 一个Bitset类创建一种特殊类型的数组来保存位值。BitSet中数组大小会随需要增加。 |
Une classe Bitset crée un type spécial de tableau pour contenir les valeurs de bits. La taille du tableau dans BitSet augmentera selon les besoins.
Définir des algorithmes
Le framework de collection définit plusieurs algorithmes qui peuvent être utilisés pour les collections et les mappages. Ces algorithmes sont définis comme des méthodes statiques de la classe collection.
Certaines méthodes peuvent lancer une ClassCastException lorsque vous essayez de comparer des types incompatibles. Lorsque vous essayez de modifier une collection non modifiable, une UnsupportedOperationException est levée.
L'ensemble définit trois variables statiques : EMPTY_SET EMPTY_LIST, EMPTY_MAP. Aucune de ces variables ne peut être modifiée.
Numéro de série | Description de l'algorithme | ||||
---|---|---|---|---|---|
1 |
Algorithmes de collecte
|
Comment utiliser les itérateurs
En général, vous souhaiterez parcourir les éléments d'une collection. Par exemple, affichez chaque élément d'une collection.
Le moyen le plus simple de procéder est d'utiliser un itérateur, qui est un objet qui implémente l'interface Iterator ou l'interface ListIterator.
Iterator vous permet d'obtenir ou de supprimer des éléments d'une collection via une boucle. ListIterator étend Iterator pour permettre le parcours bidirectionnel des listes et la modification des éléments.
Toutes les méthodes fournies par les interfaces Iterator et listIterator sont répertoriées ici à travers des exemples. <table class="reference>Numéro de série | Description de la méthode itérateur | ||||
---|---|---|---|---|---|
1 |
Utilisation de l'itérateur Java
|
Comment utiliser les comparateurs
TreeSet et TreeMap stockent les éléments dans un ordre trié Cependant, c'est via le comparateur qu'il est possible de définir précisément quel ordre de tri est suivi.
Cette interface nous permet de trier une collection de différentes manières.
序号 | 比较器方法描述 |
---|---|
1 |
使用 Java Comparator 这里通过实例列出Comparator接口提供的所有方法 |
Résumé
Le Java Collections Framework fournit aux programmeurs des structures de données préemballées et des algorithmes pour les manipuler.
Une collection est un objet qui contient des références à d'autres objets. L'interface de collection déclare les opérations pouvant être effectuées sur chaque type de collection.
Les classes et interfaces du framework de collection se trouvent dans le package java.util.