Soit ta première liste L1 : A - B - D - X - B - D - E - Z
Et ta seconde L2 : B - D - E.
- On va parcourir L1, donc on va commencer par A, puis on parcourt L2, on prend B : on teste A égal B : non, on continue le parcourt de L1
- On prend le suivant dans L1, donc B, on prend le premier dans L2, donc B, on teste B égal B, oui, on continue le parcourt de L2
- On prend le suivant dans L1 (donc D) et dans L2(donc D), on teste D égal D, oui, on continue le parcourt de L2
- On prend le suivant dans L1 (donc X) et dans L2(donc E), on teste X égal E, non, on arrête le parcourt de L2, et on continue le parcourt de L1
- on prend le suivant dans L1, donc D, on prend le premier dans L2, donc B, on teste D = B, non, on continue le parcourt de L1
- on prend le suivant dans L1, donc X, on prend le premier dans L2, donc B, on teste X = B, non, on continue le parcourt de L1
- On prend le suivant dans L1, donc B, on prend le premier dans L2, donc B, on teste B égal B, oui, on continue le parcourt de L2
- On prend le suivant dans L1 (donc D) et dans L2(donc D), on teste D égal D, oui, on continue le parcourt de L2
- On prend le suivant dans L1 (donc E) et dans L2(donc E), on teste E égal E, oui, on continue
- On a atteint la fin de la chaine dans L2 : youpi, on a trouvé L2 dans L1 !!!
On voit bien qu'on parcourt L1 et L2, donc deux index, un pour parcourir L1, et un pour parcourir L2 (qui sert aussi à parcourir L1, mais à partir de l'index qui sert à parcourir L1 (d'où le indexPrincipal + indexCherche)).
Il y a un autre moyen qui permet de se passer de second index, en passant par une méthode de List (qui rend l'algo moins "dans le sens de l'exercice" je pense) :
list1.sublist( début, fin ).equals( list2 )
avec début l'index de parcourt de list1 (ou obtenu avec indexOf() (qui est également d'ailleurs moins dans le sens de l'exercice)), et le plus petit nombre entre l'index+la taille de list2, et la taille de list1...
Partager