Collections.
Une collection représente un groupe d'objets, connu par ses éléments.
Certaines collections acceptent les doublons, d'autres pas.
Certaines sont ordonnées, d'autres pas.
Certaines collections émettent quelques restrictions, comme le type ou l'interdiction de la valeur null.
--
On trouve : ArrayList, HashSet, HashMap ou LinkedList, ...
Les tableaux ...
Un tableau est une liste d'éléments. Ce n'est pas une collection en soi, car un tableau n'implémente pas l'interface Collection.
int [] monTableau = new int[20] ; // création d'un tableau de 20 entiers
monTableau[0]=15 ; // insertion au premier index de l'entier 15
System.out.println("Mon entier vaut : " + monTableau[0]) ; // affichage
List :
Une liste est une collection ordonnée.
L'utilisateur de celle-ci a un contrôle complet sur les éléments qu'il insère dedans, et il peut y accéder par l'entier de leur index.
Les listes ont toujours comme premier élément 0.
LinkedList
Une liste chaînée est une liste dont chaque élément est relié au suivant par une référence à ce dernier.
Une liste chaînée peut être utilisée dans le cadre d'une simulation de pile ou de file, FIFO(First In First Out) ou FILO(First In Last Out).
La taille d'une LinkedList n'est pas fixe : on peut ajouter et enlever des éléments selon nos besoins.
Nous pouvons aussi remarquer que les LinkedList acceptent tous types d'objets.
LinkedList n'est pas Thread Safe.
--
List maListe=new LinkedList() ; // on crée notre liste chaînée
maListe.add(new Integer(1)) ; // on ajoute l'entier 1 à la liste
maListe.add(new Float(2.15)) ; // on ajoute le flottant 2.15 à la liste
/* On remarque ici que l'entier 1 est la tête de la liste, et que le flottant
* est la queue de la liste. */
Integer monEntier=(Integer)maListe.getFirst() ; // on n'oublie pas de faire le cast
Float monFloat=(Float)maListe.getLast(); // on n'oublie pas de faire le cast
maListe.remove(0) ; // on retire l'entier , le flottant devient la tete
Méthode :
Les opérations principales sur une liste chaînée sont :
add(Object o) : ajoute un objet o en fin de liste
addFirst(Object o) : ajoute un objet o en début de liste
addLast(Object o) : ajoute un objet o en fin de liste
clear() : vide la liste
contains(Object o) : renvoie true si la liste contient l'objet o, false sinon.
La redéfinition de la fonction hashCode() expliquée dans la partie sur les Map est ici importante.
Si vous utilisez la fonction hashCode() définie dans object, contains(Object o) vous renverra true si l'objet référencé est présent dans la liste, et non pas si il y-a un objet exactement égal à o.
getFirst() et getLast() : renvoie le premier et le dernier élément de la liste sous forme d'Object. Ne pas oublier le cast.
removeFirst() et removeLast() : retire le premier et le dernier élément de la liste.
size() : renvoie la taille de la liste
ArrayList :
Un ArrayList est un tableau qui se redimensionne automatiquement.
Il accepte tout type d'objets, null y compris.
Chaque instance d'ArrayList a une capacité, qui définit le nombre d'éléments qu'on peut y stocker.
Au fur et à mesure qu'on ajoute des éléments et qu'on " dépasse " la capacité, la taille augmente en conséquence.
--
List monArrayList = new ArrayList(10) ; // on crée un ArrayList de taille 10
for(int i = 0; i < 30 ; i++) {
monArrayList.add(new Integer(i)); // on ajoute 30 entiers
}
/* On remarque que le ArrayList , au moment d'ajouter 10, atteint sa capacité maximale, il se redimensionne pour en accepter plus */
Méthode :
Les opérations principales sur un ArrayList sont :
add(Object o) : ajoute l'objet o à la fin du ArrayList
clear() : vide le ArrayList
get(int index) : renvoie l'Object à l'index spécifié. Renvoie une exception si vous dépassez le tableau (IndexOutOfBoundsException)
size() : renvoie la taille du ArrayList
Attention :
Les opérations d'accès à un objet (get), de récupération de la taille (size), d'iteration (iterator) et d'itération spéciale (listIterator) sont exécutées en temps constant, c'est à dire que quel que soit le ArrayList, ces opérations prendront le même temps.
L'opération d'ajout quant à elle est en temps amorti, c'est à dire que les ajouts en fin et début de liste sont plus rapides.
Cependant, il faut mettre en avant la faiblesse d'ArrayList qui est que le fait de redimensionner demande beaucoup de ressources.
Il est donc nécessaire de minimiser ces redimensionnements, notamment en définissant une taille de base assez large lors de sa construction.
Map :
Une map est une collection qui associe une clé à une valeur.
La clé est unique, contrairement à la valeur qui peut être associée à plusieurs clés.
La majorité des collections de type Map ont deux constructeurs : un constructeur sans paramètre créant une Map vide, et un constructeur prenant en paramètre une Map qui crée une nouvelle Map en fonction de la Map passée en paramètre.
HashTable :
Un HashTable est une implémentation de Map qui associe une clé à une valeur.
N'importe quel objet, mis à part null peut y être ajouté.
Voici un exemple d'utilisation de HashTable, où on associe un numéro de mois à son nom :
Exemple :
Map monHashtable = new Hashtable() ;
monHashtable.put(new Integer(1),"Janvier");
monHashtable.put(new Integer(2),"Fevrier");
monHashtable.put(new Integer(3),"Mars");
monHashtable.put(new Integer(4),"Avril");
monHashtable.put(new Integer(5),"Mai");
monHashtable.put(new Integer(6),"Juin");
monHashtable.put(new Integer(7),"Juillet");
monHashtable.put(new Integer(8),"Aout");
monHashtable.put(new Integer(9),"Septembre");
monHashtable.put(new Integer(10),"Octobre");
monHashtable.put(new Integer(11),"Novembre");
monHashtable.put(new Integer(12),"Décembre");
HashMap :
Un HashMap est une collection similaire au HashTable.
Seules deux choses les diffèrent : HashMap accepte comme clé et comme valeur null, et HashMap n'est pas Thread Safe.





