ArrayList vs HashMap

ArrayList et HashMap sont deux classes de collection en Java. Même s'ils ont le même rôle de collectionner et organiser les données, la manière dont ils sauvegardent et traitent les données est différent. Dans cette article nous allons vois les différences et les similitudes entre les deux.

Différence entre ArrayList et HashMap en Java

L'une des différences importante entre la classe HashMap et ArrayList est que la première est l'implémentation de table de hachage et la deuxième est un tableau dynamique qui peut se redimensionner. HashMap et ArrayList sont les deux classes les plus populaires du framework java collection. Les deux sont utilisés dans le stockages des informations et leurs implémentation, utilisation est complètement différent.
La différence principale entre ArrayList et HashMap est que ArrayList est basé sur la structure de l'index de tableau tandis que HashMap est une structure d'une map qui utilise le hachage pour extraire les valeurs.

Quelques différences cruciales entre ArrayList et HashMap:
  • La première différence entre ArrayList et HashMap est que ArrayList implémente L'interface List tandis que HashMap implémente l'interface Map en Java.
  • ArrayList sauvegarde un objet à la fois tandis que HashMap sauvegarde la clé et la valeurs<key,value>.
  • ArrayList maintient l'ordre des objets ajoutés. HashMap ne garantie pas cette fonctionnalité.
  • ArrayList autorise l'insertion des objets en double mais HashMap ne permet pas l'insertion deux fois la même clé mais elle le permet pour les valeurs de cette clé.
  • La compléxité de la méthode get(index) de ArrayList est O(1) mais HashMap get(key) peut être O(1) dans le meilleur cas et O(n) dans les pires cas.

Similitudes entre ArrayList et HashMap en Java

Voici quelques points en commun entre ArrayList et HashMap en java:
  • ArrayList et HashMap ne sont pas synchronisés. Vous ne devez pas les utiliser dans un programme multi-threading sans une synchronisation externe.
  • L'itération de ArrayList et HashMap peut déclencher un ConcurrentModificationException si un changement de structure vient de se produire une fois Iterator est créé.
  • ArrayList autorise nullHashMap autorise null pour les clés et les valeurs.
  • ArrayList autorise les éléments dupliqués et HashMap autorise les valeurs dupliqués.
  • En terme de performance ArrayList a un temps constant pour la lecture si vous connaissez l'index avec la méthode get() similaire à HashMap qui a aussi un temps de lecture constant.
  • L'implémentation de ArrayList et HashMap est basée sur un tableau.
  • Les deux collections ArrayList et HashMap peuvent être parcourues avec Iterator.

Classement TIOBE des langages de programmation Janvier 2019

La classement des langages de programmation TIOBE est un indicateur de popularité. L'évaluation est basée sur le nombre des ingénieurs compétents autour du monde, des tutoriels, des développeurs ainsi que le nombre de requêtes traitées par les moteurs de recherche tels que Google, Yahoo, Bing, Baidu.

Ce classement est utile pour savoir si vos compétences de programmation sont toujours à jour ou pour prendre une décision stratégique par exemple sur un langage que vous utilisez pour développer un logiciel. Pour plus d'informations visitez le site tiobe.



mercredi 23 janvier 2019

Vérifier et valider une adresse IP avec les expressions régulières

L'expression régulière suivante vérifie la validité d'une adresse IPv4.

private static final Pattern PATTERN = Pattern.compile(
        "^(([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d\\d?|2[0-4]\\d|25[0-5])$");

public static boolean validate(final String ip) {
    return PATTERN.matcher(ip).matches();
}

Description:

^  #Début
 (  #  Début du groupe #1
   [01]?\\d\\d? #    Peut être un ou deux chiffres. Si le nombre est supérieur à 100, il doit commencer par un 0 ou 1
  #    ex. ([0-9], [0-9][0-9],[0-1][0-9][0-9])
    |  #    ...ou
   2[0-4]\\d #    commence avec 2, suivi par 0-4 et termine avec n'importe quel chiffre
    |           #    ...ou
   25[0-5]      #    commence avec 2, suivi par 5 et termine avec 0-5
 )  #  fin du groupe #2
  \.            #  suivi par un point "."
....            # répêter 3 fois (3x)
$  #fin


Récupérer le chemin d'un fichier en Java

La méthode File.getAbsolutePath() renvoie le nome du chemin complet du fichier (chemin + nom).

Exemple:

File file = File("C:\\Dossier_111\\fichier.txt");
System.out.println("Chemin: " + file.getAbsolutePath());
Il va afficher le chemin complet : "C:\\Dossier_111\\fichier.txt".

Dans la plupart des cas, vous aurez besoin de récupérer seulement le chemin sans le nom du fichier en utilisant des fonctions comme substring() et lastIndexOf().

File file = File("C:\\Dossier111\\fichier.txt");
String absolutePath = file.getAbsolutePath();
String filePath = absolutePath.
substring(0,absolutePath.lastIndexOf(File.separator));
System.out.println("Chemin: " + filePath);
Exécution:

C:\\Dossier111

Ressources:
tutorialspoint - Java.io.File.getAbsolutePath() Method


Classement TIOBE des langages de programmation pour mars 2018


La classement des langages de programmation TIOBE est un indicateur de popularité. L'évaluation est basée sur le nombre des ingénieurs compétents autour du monde, des tutoriels, des développeurs ainsi que le nombre de requêtes traitées par les moteurs de recherche tels que Google, Yahoo, Bing, Baidu.

Ce classement est utile pour savoir si vos compétences de programmation sont toujours à jour ou pour prendre une décision stratégique par exemple sur un langage que vous utilisez pour développer un logiciel. Pour plus d'informations visitez le site tiobe.






jeudi 22 mars 2018

Java - supprimer un élément d'un tableau

Comment supprimer un objet particulier de type string ou int d'un tableau en java ?
Le meilleur choix est d'utiliser une collection d'objets. Les éléments sont copier dans le même tableau avec un décalage de position -1.

public void removeElement(Object[] a, int del) {
    System.arraycopy(a,del+1,a,del,a.length-1-del);
}

Apache Commons

Vous pouvez aussi utiliser la librairie commons lang's ArrayUtils.

array = ArrayUtils.removeElement(array, element)
Ressources:
https://stackoverflow.com/questions/642897/removing-an-element-from-an-array-java

Java - modifier une clé dans Hashtable

Dans ce tutoriel nous allons voir comment modifier ou remplacer une clé dans Hashtable. Java ne dispose pas d'une méthode qui fait ça et dans ce cas on est obligé d'écrire notre solution. Premièrement, on va récupérer la valeur de la clé recherchée puis supprimer l'ancienne clé-valeur et à la fin insérer la nouvelle clé avec l'ancien valeur.

Exemple:

 
package com.codeurjava.hashtable;

import java.util.*;

public class hashtable_replace_key {
 
   public static void main(String args[]) {
    
    // crérer une hashtable
    Hashtable ht = new Hashtable();      
       
    // insérer des pairs
    ht.put(1, "A");
    ht.put(2, "B");
    ht.put(3, "C");
       
    System.out.println("Hashtable avant : "+ht);
    
    //clé à modifier
    int key = 2;
    
    // avant on doit récupérer la valeur de la clé recherchée
    // et sauvegarder cette valeur dans une variable
    // pour que l'on affecte à la nouvelle clé
    String val = (String) ht.get(2);
    
    // supprimer l'ancien clé
    ht.remove(key);
    
    // insérer le nouveau pair clé-valeur
    ht.put(22,val);
    
    System.out.println("Hashtable après : "+ht); 
   
   }   
   
}
Exécution:

 
Hashtable avant : {3=C, 2=B, 1=A}
Hashtable après : {3=C, 1=A, 22=B}

Java - Modifier une valeur dans Hashtable

Supposons que nous avons une Hashtable<String, Integer> en Java. Comment modifier ou remplacer la valeur pour une clé donnée.

Exemple de la méthode java.util.Hashtable.put(K key, V value)

Cette méthode est utilisée pour lier la clé à une valeur dans une Hashtable. L’exception NullPointerException est déclenchée si la clé ou la valeurs sont nuls. Si la clé existe déjà, sa valeur est remplacée automatiquement.

L'exemple ci-dessous montre la modification d'une valeur.

 
package com.codeurjava.hashtable;

import java.util.*;

public class hashtable_put {
 
   public static void main(String args[]) {
    // crérer une hashtable
    Hashtable ht = new Hashtable();      
       
    // insérer des pairs
    ht.put(1, "A");
    ht.put(2, "B");
    ht.put(3, "C");
       
    System.out.println("Hashtable avant modification : "+ht);
       
    // modifier la valeur de la clé 2
    String val_ret=(String)ht.put(2,"BB");
       
    System.out.println("Valeur remplacée : "+val_ret);
       
    System.out.println("Hashtable après modification : "+ht); 
   
   }   
   
}
Exécution:

 
Initial hash table value: {3=C, 2=B, 1=A}
Valeur remplacée : B
Nouvelle Hashtable : {3=C, 2=BB, 1=A}

Exemple de la méthode replace()

Java dispose d'une autre méthode replace().
  • public boolean replace(K key, V oldValue, V newValue)
Il n'y a aucune différence entre la méthode put et replace() dans ce cas ou il existe déja une affectation entre la clé et la valeur et que l'on veut remplacer.

ht.replace(2,"B","BB");
Ressources:
https://docs.oracle.com/javase/7/docs/api/java/util/Hashtable.html#put(K,%20V)

PHP - Corriger l'erreur Undefined variable

L'erreur Undefined variable souvent apparaît pendant l'exécution du script PHP sous forme d'un message:

Notice: Undefined variable: nom_variable in C:\wamp\www\projet\index.php on line 14
ca signifie quoi cette erreur et comment la corriger ?

L'erreur Undefined variable est causée parce qu'elle soit :
- Elle n'a pas été déclarée dans le code.
- Elle est utilisée dans un autre fichier qui utilise le même nom de variable.
- Elle n'a pas été initialisée.

La méthode isset() détecte si la variable existe et initialisée. Encore, la méthode empty() est plus optimale parce qu'elle ne génère pas de message d'erreur.

Exemple:

foreach ($array as $item) {
    // faire quelque chose
    $count++;
}
La variable count n'a pas été définie, et dans ce cas l'erreur Undefined variable apparaît.
Pour corriger ça, ajouter la variable count avant la boucle sans oublier l'initialisation à zéro.

$count=0;
foreach ($array as $item) {
    // faire quelque chose
    $count++;
}
Exemple 2:

session_start();
// solution recommendée
$nom_utilisateur = $_SESSION['nom_utilisateur'];
if (empty($nom_utilisateur)) $nom_utilisateur = '';

Ou

// définir la variable au début de index.php
$nom_utilisateur = ''; 
$nom_utilisateur = $_SESSION['nom_utilisateur'];

Ou 

$nom_utilisateur = $_SESSION['nom_utilisateur'];
if (!isset($nom_utilisateur)) $nom_utilisateur = '';
Il ne faut pas oublier d'initialiser la session avec session_start() sinon le serveur ne va pas pouvoir identifier et lire les variables $_SESSION.

Ressources:
http://php.net/manual/en/function.empty.php
PHP: “Notice: Undefined variable”

dimanche 8 octobre 2017