import java.util.LinkedList;
import java.util.Scanner;
/**
* Cette classe va créer et utiliser des listes avec les opérations les plus
* courantes (et donc, souvent, les plus élémentaires).
*
* Documentation Java : http://java.sun.com/javase/6/docs/api/java/util/LinkedList.html
*
* Une bonne théorie des listes liées (LinkedList) se trouve ici :
* http://en.wikipedia.org/wiki/Linked_list
* Cette page couvre une bonne partie de la théorie sur les listes et
* contient malheureusement des informations trop "pointues". Il faudra
* donc simplement se contenter de lire le début et d'essayer de le comprendre
* (surtout le schéma !).
*
* Nous allons travailler avec une liste qui ne contient que des objets
* de type String (on aurait pu travailler avec des Integer ou autres).
*/
public class ManipulationListes {
public static void main(String[] args) {
String s1="s4A2emEd",s2="phAc7ujA",s3="cathe5uK",s4="t3UTHAbr",s5="rabUP4zA";
String[] tabPasswords = new String[5]; // tableau de String (5 entrées mais vides)
LinkedList<String> listPasswords = new LinkedList<String>(); // liste vide (0 entrée)
// remplissage manuel d'un tableau de String avec des String...
tabPasswords[0] = s1;
tabPasswords[1] = s2;
tabPasswords[2] = s3;
tabPasswords[3] = s4;
tabPasswords[4] = s5;
// remplissage manuel d'une liste de String avec des String...
listPasswords.add(s1);
listPasswords.add(s2);
listPasswords.add(s3);
listPasswords.add(s4);
listPasswords.add(s5);
/* L'utilisation de la méthode add(String e) se devine en lisant la documentation
* et en se posant la question suivante : "comment vais-je pouvoir ajouter un élément
* dans ma liste ?" : la méthode add est la réponse.
*
* Supposons à présent que les 5 String sont des mots de passe récupérés depuis une
* base de données (ou peu importe). L'utilisateur va entrer son mot de passe dans
* la console et nous allons voir s'il est bien parmi ceux que nous connaissons.
*/
Scanner monScanner = new Scanner(System.in);
/* Création de l'objet Scanner.
* Documation : http://java.sun.com/javase/6/docs/api/java/util/Scanner.html
*/
System.out.println("Entrez un mot de passe :");
String motDePasse = monScanner.next(); // next() va bien chercher le String, puis on le stocke
boolean correctTab = false; // cette variable servira à retenir si le MDP est correct ou non
boolean correctList = false; // idem, mais pour la liste
// version tableau
for(int i = 0; i < tabPasswords.length; i++) {
if(tabPasswords[i].equals(motDePasse)) { // si on le trouve dans le tableau...
correctTab = true; // ...on place correctTab à true
}
}
// version liste
if(listPasswords.contains(motDePasse)) { // si on le trouve dans la liste...
correctList = true; // ...on place correctList à true
}
/* Quelle est la différence ? Y'en a-t-il une ?
* La différence c'est que dans la version tableau, il a fallu programmer
* le parcours séquentiel (élément par élément) du tableau alors que la
* recherche dans la liste a été beaucoup plus simple : il a suffit de faire
* un appel à la méthode "contains" :
* http://java.sun.com/javase/6/docs/api/java/util/LinkedList.html#contains%28java.lang.Object%29
* qui "Returns true if this list contains the specified element." !
*
* Affichons donc les deux résultats pour se convaindre qu'ils seront identiques mais
* que la programmation avec la liste a été beaucoup plus simple du côté du programmeur
* qui ne doit plus s'occuper de savoir "comment" la liste est parcourue pour savoir
* si oui ou non l'objet est dedans.
*/
System.out.println("Réponse avec tableau : " + correctTab);
System.out.println("Réponse avec liste : " + correctList);
}
}
Reply