Archives pour la catégorie Java

Entity Graph de JPA 2.1

Jusqu’à la version 2.0 de JPA, les relations de nos beans étaient chargées en LAZY (par défaut) ou en EAGER. Le mode LAZY était utilisé dans la plupart des cas pour avoir des applications performantes et scalables. Pour autant, il y a toujours un moment où le mode LAZY ne suffit plus, nécessitant d’écrire des requêtes spécifiques, sans pour autant que le mode EAGER convienne (ou soit possible). Les utilisateur d’Hibernate penseront notamment à l’irritant LazyInitializedExcpetion. C’est là qu’interviennent les Entity Graphs.

Lire la suite

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

Puzzle sur le final++

Vous connaissez le mot-clé « final » en Java ? Si je n’est pas le cas, je vous renvoie vers un petit mémento des mots-clés du langage Java.

1
final int i = 0;

Vous connaissez la post incrémentation qui s’écrit à l’aide de deux signes plus.

1
i++;

Mais que se passe-t-il lorsqu’on cumule les deux ? C’est le puzzle de la semaine. Que fait le code suivant ?

1
2
3
4
final int i = 0;
i++;
i++;
System.out.println(i);

Je vous propose plusieurs solutions. Essayez de trouver la bonne sans tricher (sans le tester dans Eclipse). Ici, il faut non seulement avoir la bonne réponse mais aussi la bonne explication.

1) Ça ne compile pas ;
2) Ça écrit 0 (zéro) ;
3) Ça écrit 1 ;
4) Ça écrit 2 ;
5) Ça lance une RuntimeException (RE) ;
6) Ça fait autre chose, à préciser.

Exprimez-vous dans les commentaires…

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