[Résolu] Une question d'optimisation
-
Salut !
Je souhaitais savoir (question qui me tracassait…) comment fonctionne exactement la boucle for en mode itération. Je voulais savoir si la liste passée en paramètre n°2 est appelée à chaque tour de boucle ou non. Ce sera plus parlant avec un exemple :
//Soit une liste quelconque de Listener for(Listener i : this.getProfiles().getListeners()){//L'instruction this.getProfiles().getListeners() est-elle répétée ou la boucle garde-t-elle la liste en mémoire ? i.onProfileChanged(profile); }
Ça me tracasse parce que certaines de mes méthodes renvoyant des List prennent un certain temps à rassembler les données.
Merci d’avance
-
Je ne pense pas.
Tu utilises un iterator de manière implicite.
Après le seul moyen de vérifier c’est de faire un syso dans ton getListeners(). -
Hum je vais faire ça oui.
-
Si je me rappelle bien. C est effectivement appelé à chaque fois. Mais à moins que tu sois sous Android et/ou que ta liste est énorme (comme 10000+ items) ça ne devrait pas poser problème
Écrit avec Tapatalk depuis mon mobile. Pardonnez les possibles fautes, j’aime juste pas écrire avec mon mobile.
-
@‘jglrxavpok’:
Si je me rappelle bien. C est effectivement appelé à chaque fois. Mais à moins que tu sois sous Android et/ou que ta liste est énorme (comme 10000+ items) ça ne devrait pas poser problème
Écrit avec Tapatalk depuis mon mobile. Pardonnez les possibles fautes, j’aime juste pas écrire avec mon mobile.
Disons que pour une liste de téléchargements c’est pas top x)
@SuppressWarnings("unchecked") public List <downloadable>getAssetsByVersion(String versionName, boolean requiredOnly) throws MalformedURLException, IOException{ String hash = Utils.getMD5(versionName); URL url = new URL(/**url ftp + hash**/); List <downloadable>downloadables = new ArrayList<downloadable>(); ObjectInputStream reader = null; try{ reader = new ObjectInputStream(url.openConnection()); downloadables = (List<downloadable>)reader.readObject(); finally{ IOUtils.closeQuietly(reader); } return downloadables; }
De toute façon, dans le doute, j’instancie toujours ma liste dans une variable avant de la mettre dans la boucle.
C’est bon, je viens de checker ! La méthode n’est appelée qu’une seule fois. La liste est donc conservée en mémoire dans la boucle.</downloadable></downloadable></downloadable></downloadable>
-
C’est bien ce que je pensais mais attention ce n’est pas valable dans tout les langages