126 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
up:: [[java]]
 | 
						|
title:: "gérer des ensemble d'obets"
 | 
						|
#s/informatique 
 | 
						|
 | 
						|
---
 | 
						|
 | 
						|
 - regroupement d'objets (éléments) 
 | 
						|
 | 
						|
# Types de collections
 | 
						|
 | 
						|
![[java collections 2022-10-24 08.45.06.excalidraw|800]]
 | 
						|
 | 
						|
 | 
						|
## Critères de choix du type de collection
 | 
						|
 | 
						|
 - éléments ordonnés ou non
 | 
						|
 - accès direct a un élément Est possible ou pas
 | 
						|
 - accès à la valeur se fait 
 | 
						|
 | 
						|
 | 
						|
# Collections
 | 
						|
 - Accessibles en important `java.util`
 | 
						|
 - depuis `JDK 5`, les collections sont [[java généricité|génériques]] : `Collection<E>`
 | 
						|
 - certaines collections sont **ordonnées** : `ArrayList`, `Linked`list`
 | 
						|
 - possiblité d'accéder 
 | 
						|
 - possible d'ajouter `null`
 | 
						|
 | 
						|
 - méthodes
 | 
						|
     - `compareTo`
 | 
						|
 | 
						|
## Itérateurs
 | 
						|
 - **monodirectionnels** : parcours du début à la fin
 | 
						|
 - **bidirectionnels** : parcours la collection dans les deux sens
 | 
						|
 | 
						|
 - notion d'ordre pour ne parcourir qu'une seule fois
 | 
						|
     - explicite pour les collections ordonnées 
 | 
						|
     - implicite pour les `Set` etc...
 | 
						|
 | 
						|
### Itérateurs monodirectionnels 
 | 
						|
 - accessibles par la méthode `iterator()` qui implémente l'interface `Iterator<E>`
 | 
						|
 - un itérateur qui indique une position courante qui d2signe un élément de la collection 
 | 
						|
 - méthode `hasNext()` : savoir s'il y à un élément accessible dans la collection 
 | 
						|
 - méthode `next()` : se placer sur et récupérer l'élément courant
 | 
						|
 | 
						|
```java
 | 
						|
Iterator<E> iter = c.iterator();
 | 
						|
 | 
						|
while (iter.hasNext()) {
 | 
						|
    E elem = iter.next();
 | 
						|
    // exemple :
 | 
						|
    if (condition) iter.remove();
 | 
						|
}
 | 
						|
 | 
						|
for (E elem : iter) {
 | 
						|
    // ...
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
#### Supprimer le premier élément 
 | 
						|
```java
 | 
						|
Iterator<E> iter = c.iterator();
 | 
						|
E fst = iter.next();
 | 
						|
iter.remove(); // on retire à iter, on ne fait pas `fst.remove()`
 | 
						|
```
 | 
						|
 | 
						|
 - `remove` ne supprime pas l'élément à la position courante, mais l'objet qui à été accédé précédemment 
 | 
						|
 - nécessaire d'avoir un objet courant pour appeler la méthode `remove`
 | 
						|
 | 
						|
### Itérateurs Bidirectionnels
 | 
						|
 | 
						|
#### Interface ListIterator 
 | 
						|
 | 
						|
 - collections `ArrayList` et `LinkedList` peuvent être parcourues dans les deux sens 
 | 
						|
 - ajoute les méthodes `hasPrevious` et `previous` 
 | 
						|
 - ajoute la méthode d'addition à la **position courante** `add`, ou de modification de l'élément courant avec la méthode `set`
 | 
						|
 - exemple d'ajout dans une collection 
 | 
						|
```java
 | 
						|
ListIterator<E> it;
 | 
						|
it = c.listIterator();
 | 
						|
it.next(); // objet courant = 1er élément 
 | 
						|
it.next(); // 2ème élément 
 | 
						|
it.add(elem); // ajout en 2ème position
 | 
						|
              // le 2ème élément devient le 3ème
 | 
						|
```
 | 
						|
 | 
						|
##### Vecteurs dynamiques ArrayList
 | 
						|
 - structure ordonnées, accès direct par indice, autorise les doublons 
 | 
						|
 - comparable à un tableau :
 | 
						|
     - accès rapide aux éléments 
 | 
						|
     - éléments contigus en mémoire 
 | 
						|
     - ajout et insertion en $\mathcal{O}(n)$ en moyenne (contre $\mathcal{O}(1)$ pour une liste chaînée)
 | 
						|
 - mais :
 | 
						|
     - nombre d'éléments put varier au cours de l'exécution 
 | 
						|
     - accepte n'importe quels types, même `null`
 | 
						|
 - dérive de `List<E>`
 | 
						|
###### Ajout
 | 
						|
```java
 | 
						|
AraryList<E> v1 = new ArrayList<E> ();  // rempli de null
 | 
						|
ArrayList<E> v2 = new ARrayList<E> (c); // rempli de c
 | 
						|
```
 | 
						|
 | 
						|
 - ajout d'élément.s à une position donnée 
 | 
						|
```java
 | 
						|
v1.add(e1); // ajout à la fin
 | 
						|
v1.add(3, e1); // ajout à l'index 3
 | 
						|
```
 | 
						|
 | 
						|
 - `.addAll(iter)` : ajouter tous les éléments d'un itérateur
 | 
						|
###### Suppression 
 | 
						|
```java
 | 
						|
E elem = v1.remove(3);
 | 
						|
v2.removeRange(1, 4);
 | 
						|
```
 | 
						|
###### Parcours et accessseurs 
 | 
						|
 - `.size()` : renvoie la taille du tableau 
 | 
						|
 - `.get(idx)` : valeur à l'index `idx`
 | 
						|
###### Autres méthodes
 | 
						|
 | 
						|
 - `isEmpty()`
 | 
						|
 - `indexOf(object)` : indice de l'objet, `-1` s'il n'est pas dans la liste
 | 
						|
 - `contains(object)`
 | 
						|
 - `set(i, object)` : remplace l'élément situé en `i` par `object`
 | 
						|
 - `clear()`
 | 
						|
 - `isEmpty()`
 | 
						|
 |