CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[JAVA] ArrayList vs Tableau

Capitainerie
Capitainerie
Niveau 6
06 janvier 2018 à 18:39:15

Salut, étant débutant en Java j'ai voulu comparer les ArrayList et les tableaux. Pour ça j'ai construit un tableau et une ArrayList des n premiers nombres (1,2,3,...,n) et j'ai fait la somme par 2 méthodes différentes. J'ai calculé le temps que ça me prend lorsque je passe un très grand nombre en paramètre https://image.noelshack.com/fichiers/2017/39/3/1506524542-ruth-perplexev2.png

Le code pour ceux qui veulent (je rappelle que je débute) :
https://pastebin.com/Kkn645nA

Et j'étais super étonné, regardez cette différence de temps de calcul pour la somme des 10 000 000 premiers entiers :ouch:

Somme Tableau -> 0.016 secondes
Somme ArrayList -> 2.594 secondes

Comment expliquer ça ?

Message édité le 06 janvier 2018 à 18:40:17 par Capitainerie
Capitainerie
Capitainerie
Niveau 6
06 janvier 2018 à 18:40:02

Et d'ailleurs c'est jamais le même temps de calcul quand je compile, je comprends pas pourquoi non plus :hap:

dechet_s0cial
dechet_s0cial
Niveau 10
06 janvier 2018 à 19:12:16

http://javahungry.blogspot.com/2015/03/difference-between-array-and-arraylist-in-java-example.html
en gros:
un array est static donc pas de redimensionage donc plus rapide
ArrayList est une surcouche qui se base sur un array et donc quand tu appele une methode, ça met plus de temps forcément

Message édité le 06 janvier 2018 à 19:16:34 par dechet_s0cial
dechet_s0cial
dechet_s0cial
Niveau 10
06 janvier 2018 à 19:35:10

tu comprends?
qu'est ce que tu cherches a faire exactement?

Capitainerie
Capitainerie
Niveau 6
06 janvier 2018 à 19:49:50

Le 06 janvier 2018 à 19:35:10 dechet_s0cial a écrit :
tu comprends?
qu'est ce que tu cherches a faire exactement?

Merci pour ta réponse, je comprends mieux maintenant.

J'ai posé la même question sur le 18-25 et j'ai eu pas mal de réponses.
https://www.jeuxvideo.com/forums/42-51-54708142-1-0-1-0-java-arraylist-vs-tableau-match-a-mort.htm

Mais je suis bloqué là. On m'a conseillé de construire mon ArrayList de ma méthode fabricArray comme ça :
ArrayList<Integer> list = new ArrayList<>(n);

De façon a allouer un espacé mémoire directement pour la construction de la List.

Mais problème, c'est pas du tout le résultat attendu. En fait c'est même pire qu'avant, je passe de 2.7 secondes pour calculer la somme a 3.4 secondes. Là j'avoue que je bloque ...

Et aussi, pour calculer la somme c'est le même temps de calcul entre les ArrayList et les tableau, ce qui diffère c'est justement la construction :(

dechet_s0cial
dechet_s0cial
Niveau 10
06 janvier 2018 à 19:52:52

est ce que tu dois absolument travailler avec un arrayList?? parce que je vois que tu te préocupe du temps de traitement;

Message édité le 06 janvier 2018 à 19:53:19 par dechet_s0cial
Capitainerie
Capitainerie
Niveau 6
06 janvier 2018 à 20:00:01

Le 06 janvier 2018 à 19:52:52 dechet_s0cial a écrit :
est ce que tu dois absolument travailler avec un arrayList?? parce que je vois que tu te préocupe du temps de traitement;

Non mais ça c'est juste pour comparer les ArrayList et les tableaux, mon programme il sert à rien (ou enfin si, pour me faire comprendre la différence)

dechet_s0cial
dechet_s0cial
Niveau 10
06 janvier 2018 à 20:03:57

Le 06 janvier 2018 à 20:00:01 Capitainerie a écrit :

Le 06 janvier 2018 à 19:52:52 dechet_s0cial a écrit :
est ce que tu dois absolument travailler avec un arrayList?? parce que je vois que tu te préocupe du temps de traitement;

Non mais ça c'est juste pour comparer les ArrayList et les tableaux, mon programme il sert à rien (ou enfin si, pour me faire comprendre la différence)

oui bah ArrayList est plus lent qu'un simple array c'est pas nouveau, surtout si tu travaille avec des types primitifs comme les int

dechet_s0cial
dechet_s0cial
Niveau 10
06 janvier 2018 à 20:08:23

ArrayList<Integer> list

chaque élément dans ta liste est un OBJECT Integer qui devra être instancié et qui n'est pas la même chose qu'un int.
deplus l'acces ce fait plus lentement car les éléments Integer ne se suivent pas en mémoire contrairement a un simple array
faut le savoir

Message édité le 06 janvier 2018 à 20:10:13 par dechet_s0cial
dechet_s0cial
dechet_s0cial
Niveau 10
06 janvier 2018 à 20:16:28

un array simple en mémoire:
avec un int de 4 octets
int[] tab = new int[5]; for(int i=0;i<n;i++) arr[i] = i;
000000 [tab[0]] //0
000004 [tab[1]] //1
000008 [tab[2]] //2
00000C [tab[3]] //3
000010 [tab[4]] //4

Message édité le 06 janvier 2018 à 20:20:01 par dechet_s0cial
dechet_s0cial
dechet_s0cial
Niveau 10
06 janvier 2018 à 20:27:48

enfaite ce qu'il faut que tu retienne, c'est que a chaque fois que tu appelles une méthode de ArrayList comme .add(1);
cette méthode tranforme le paramètre primitif int en un object de type Integer donc le retard augmente plus tu fais d'opérations et t'arrives a plus de 2 secondes d'écart avec 10000000 d'appels

Capitainerie
Capitainerie
Niveau 6
06 janvier 2018 à 20:40:53

Ok merci pour tes réponses, je capte mieux maintenant [[sticker:p/1ljp]]

Je suis encore bien débutant moi, j'ai tellement de trucs à apprendre [[sticker:p/1lmc]]

Je te laisse, passe une bonne soirée, et encore merci chef https://image.noelshack.com/fichiers/2017/31/5/1501863678-risitas596bestreup.png

StEvUgnIn_
StEvUgnIn_
Niveau 9
06 janvier 2018 à 23:44:52

La Arraylist est une classe qui contient un tableau. Tu dois instancier un objet qui contient des fonctions et autres (très très lourd)
Un tableau est une suite d'adresses sur des valeurs alloués. La taille mémoire d'un tableau est proportionnel au type de donnée (char, int, float, double, Object).

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment