Au coeur du JDK : la classe Scanner. 03 mar. 2010 Une classe injustement méconnue du JDK est Scanner (java.util.Scanner).
Elle offre pourtant des fonctionnalités très intéressantes pour parser des chaînes de caractères, et en extraire et convertir les composants. Un Scanner peut se brancher sur à peu près n'importe quelle source : InputStream, Readable (et donc Reader), File... et bien sûr une simple String. Ensuite, deux options s'offrent à vous : utiliser les méthodes de type hasNext...() / next...(), ou alors les méthodes de type find...() / match() / group(). Dans ce billet, nous verrons comment utiliser ces deux jeux d'instructions. Première méthode : hasNext() / next() Voyons une première façon d'utiliser un Scanner pour lire des flux de texte. Elle se décompose en deux étapes : Les méthodes de type hasNext...() (hasNextInt(), hasNextFloat()...) fonctionnent sur le même principe qu'un Iterator, et indiquent si le prochain token existe et s'il est bien du type spécifié.
Deuxième méthode : find() / match() / group() Java - Scanner vs. StringTokenizer vs. String.Split. Au coeur du JDK : l'enum TimeUnit. 04 janv. 2011 Aujourd'hui, je vais attirer votre attention sur une petite classe très discrète, pourtant présente depuis Java 5 : java.util.concurrent.TimeUnit.
Comme son nom l'indique, cet enum permet de représenter les unités temporelles usuelles. Rien de bien révolutionnaire, certes, mais ça peut éviter de réinventer la roue dans chacun de nos projets. Là où ça devient plus intéressant, c'est que TimeUnit propose des méthodes de conversion entre les unités : convert(long duration, TimeUnit sourceUnit) toMillis(long duration) toSeconds(long duration) toHours(long duration) ... En particulier, vu le nombre de méthodes qui prennent des millisecondes en paramètre (Thread.sleep(), Object.wait(), etc.), la méthode toMillis() pourra rendre de grands services et clarifier le code : // Avant : long oneHourInMillis = 1000 * 60 * 60;long oneHourInMillis = TimeUnit.HOURS.toMillis(1); Structures de données : les Arbres de Fenwick. 08 oct. 2012 Si je vous demande de me citer des structures de données, vous répondrez sans doute : les tableaux, les listes chaînées, les Maps, les Sets, voire les arbres binaires...
Ces structures sont simples et d'un usage courant, et suffisent pour la plupart de nos besoins. Dans certain cas toutefois, les structures basiques atteignent leurs limites, et il est nécessaire de recourir à des structures spécialisées. Aujourd'hui, je vous présente les Arbres de Fenwick. Use-case Un Arbre de Fenwick est particulièrement adapté pour calculer une somme partielle entre deux bornes.
Prenons l'exemple d'une application effectuant des transactions financières. Une solution simple consisterait à stocker ces informations dans un tableau, associant à chaque montant un compteur de transactions : A problème spécifique, solution spécifique : les Arbres de Fenwick à la rescousse ! Principes Vu de l'extérieur, un Arbre de Fenwick ressemble beaucoup à un tableau. Selon ce principe : Performances En écriture.
Labo Algo. Algorithme de colonies de fourmis. Un article de Wikipédia, l'encyclopédie libre.
En anglais, le terme consacré à la principale classe d’algorithme est « Ant Colony Optimisation » (ACO). Les spécialistes réservent ce terme à un type particulier d'algorithme. Il existe cependant plusieurs familles de méthodes s'inspirant du comportement des fourmis. En français, ces différentes approches sont regroupées sous les termes : « algorithmes de colonies de fourmis », « optimisation par colonies de fourmis », « fourmis artificielles » ou diverses combinaisons de ces variantes. Origine[modifier | modifier le code] L’idée originale provient de l’observation de l’exploitation des ressources alimentaires chez les fourmis. Des biologistes ont ainsi observé, dans une série d’expériences menées à partir de 1989[3],[4], qu’une colonie de fourmis ayant le choix entre deux chemins d’inégale longueur menant à une source de nourriture avait tendance à utiliser le chemin le plus court. Un modèle expliquant ce comportement est le suivant :