Archives pour la catégorie Collections

Le Multirator

Lors du dernier concours du meilleur « Meilleur Développeur de France », dont on vous pouvez retrouver un résumé ici, une des épreuves consistait à programmer un Multirator. Ce terme est une invention personnelle pour désigner un Iterator piochant ses éléments suivants (next) dans une liste d’Iterators. Dans le concours le Multirator devait toujours choisir la plus petite valeur disponible.

Jusqu’à aujourd’hui, le besoin d’une telle fonctionnalité ne s’est jamais fait sentir dans mes programmes. Or j’en ai justement besoin aujourd’hui. Et au lieux de programmer un Multirator de mon coté et de le garder pour moi seul, je me propose de vous présenter ma démarche.

Lire la suite

Hypothèses sur les données : tri par insertion mémoire ou tri par insertion en fin

Vous connaissez déjà le tri par insertion, de complexité O(nlogn) dans le meilleur des cas et O(n2) dans le pire. Vous savez que c’est le tri utilisé pour ordonner ses cartes au tarot. Mais connaissez-vous sa variante faisant appel à la mémoire ?

Lire la suite

Utilisez map.entrySet

Je dois souvent intervenir sur des programmes qui utilisent des maps et qui parcourent les couples clé-valeur d’une mauvaise manière. En effet, les développeurs partent des clés et recherchent les valeurs associées dans la map. Or ils font cela pour l’ensemble des éléments.

Lire la suite

Représentation d’une liste en String

A l’occasion d’un entretient, on m’a proposé de développer une méthode simple. L’idée n’était pas tant de coder la fonctionnalité que d’expliquer le raisonnement. Dans la suite, je ne vais pas vous expliquer comment bien programmer, en partant des tests, car j’ai déjà fais un billet intitulé « Kata Digital Romain » à ce sujet. A la place, je vais vous proposer plusieurs solutions qui me semble intéressantes, en Java standard, à l’aide de Guava, ou encore grâce à une approche fonctionnelle.

Lire la suite

Je trouve mon rythme à Devoxx

Le deuxième jour de Devoxx France 2012 vient de prendre fin. C’était intense. Comme hier, la rédaction de Developpez.com était au rendez-vous. Comme hier, je ne vais pas avoir assez de temps pour détailler chaque conférence. Je le ferai dans quelques jours, lorsque l’adrénaline sera retombée. Pour le moment, je vais me contenter de décrire ma journée au Marriot.

Lire la suite

Sortie rapide des boucles

Je vous invite à programmer vos boucles, et plus spécifiquement vos conditions de test, pour sortir au plus vite des boucles.

Par exemple, dans le cas suivant :

1
2
3
4
5
6
7
boolean ok = false ;
for(Foo foo : foos) {
  if( foo.truc() ) {
     ok = true ;
  }
}
return ok ;

Dans ce genre de cas, pensez à mettre un « break » dans votre boucle, pour ne pas continuer à parcourir inutilement la liste, puisque la valeur est calculée et ne changera plus.

Lire la suite

Des itérators et des boucles

Nos open-spaces sont souvent lieux de discussion à propos des parcours de liste, notamment lorsqu’on ne dispose que de l’itérator sur la liste comme c’est parfois le cas dans certaines lib.

Pour illustrer tout ça, prenons en compte la liste d’amis, définie de la manière suivante dans un test (version simplifiée).

1
2
3
4
5
6
7
8
9
10
11
private List<string> amis;
 
@Before
public void doBefore() {
    amis = newArrayList(); // cf. tuto Google-Collections
    amis.add("Lucie");
    amis.add("Jean");
    amis.add("Paul");
    amis.add("Marion");
    amis.add("Thierry");
}</string>

Lire la suite