Wiki ~ namok.be

Voici une série d'exemples d'utilisation de l'API Java. Dans la suite j'utiliserai MyObject dès que j'ai besoin d'un objet quelconque.

ArrayList

Parcours

Voici trois manières de parcourir un ArrayList.

Je choisis de définir une ArrayList ne contenant que des objets de type MyObject.

  • Pour ce faire il est nécessaire d'avoir ce type d'objet, il est définit dans la classe MyObject.java ou
  • si vous préférez, vous pouvez créer un ArrayList contenant d'autres objets; String, ou autre … à votre meilleure convenance.
import java.util.ArrayList ;
import java.util.Iterator ;
 
public class ArrayListTest  {
   public static void main ( String[] args ) {
       ArrayList<MyObject> al ;
 
       al = new ArrayList<MyObject>() ;
 
       al.add( new MyObject("Un") ) ;
       al.add( new MyObject("Deux") ) ;
       al.add( new MyObject("Trois") ) ;
       al.add( new MyObject("Quatre") ) ;
       al.add( new MyObject("Cinq") ) ;
       al.add( new MyObject("Six") ) ;
 
 
       // Méthode 1 
       // Aucune connaissance particulière d'ArrayList
       // a part les méthodes get et size
       for (int i=0 ; i<al.size() ; i++ ) {
          MyObject mo = al.get(i) ;
          System.out.println( mo );
       } // end - for
 
       // Méthode 2
       // Connaissance de Iterator
       for (Iterator<MyObject> i = al.iterator() ; i.hasNext() ; ) {
          MyObject mo = i.next() ;
          System.out.println( mo );
       } // end - for
 
       // Méthode 3
       // API 1.5
       for ( MyObject mo : al )
          System.out.println( mo );
 
   } // end - main  
} // end - class

Important la enhanced loop (méthode 3) permet de parcourir un Arraylist mais ne permet pas supprimer un élement lors du parcours … les deux autres méthodes oui.

Dans le premier cas, il suffit de faire

al.remove(i)

Dans le second, l'itérateur (Iterator) permet de supprimer l'élément en cours, c'est-à-dire de faire

i.remove()

Egalité

Voici une manière de tester le bon fonctionnement de la méthode equals de ArrayList.

import java.util.List ;
import java.util.ArrayList ;
 
public class ArrayListEqualsTest {
   public static void main ( String[] args ) {
      List<MyObject> l1 = new ArrayList<MyObject>() ;
      List<MyObject> l2 = new ArrayList<MyObject>() ;
      MyObject mo1 = new MyObject("Un") ;
      MyObject mo2 = new MyObject("Deux") ;
 
      l1.add(mo1) ;
      l1.add(mo2) ;
      l2.add(mo1) ;
      l2.add(mo2) ;
 
      System.out.println("l1 = l2 ? : " + l1.equals(l2) );
 
   } // end - main  
}

Evidemment, si des objets identiques n'ont pas la même référence, il faut écrire correctement la méthode equals de la classe MyObject.

Et l'on pourra écrire :

... 
MyObject mo1 = new MyObject("Un") ;
MyObject mo1_bis = new MyObject("Un") ;
...
l1.add(mo1) ;
l2.add(mo1_bis) ; 
...

Les deux listes seront à nouveau égales …

GregorianCalendar

Utilisation d'un GregorainCalendar (qui hérite de Calendar).

Il faut différencier l'objet Date de l'objet Calendar. Date est plutôt vu comme une date absolue, un moment dans le temps. Tandis que Calendar est vu comme un moment interprêté dans un certain calendrier (Grégorien, Julien, …).

Si l'on veut obtenir une Date correspondant au 14 février 2006, on écrira …

//extrait de code
Date saintValentin ; 
GregorianCalendar gc ; 
 
gc = new GregorianCalendar(2006,1,14) ;   // month is 0-based, 0=January, 1=February, ...
saintValentin = gc.getTIme() ; 
  • Notons aussi que le constructeur de Date() sans paramètre crée une date correspondant à maintenant.

equals

Pour être en conformité avec Java, une méthode equals() doit ressembler à ceci

class MyObject {
    public boolean equals(Object o) {
        if ( !(o instanceof MyObject) ) return false;
 
        MyObject autre = (MyObject) o;
        // Comparaison des champs de this et autre
    }
}

Demandes d'exemples

  • Est-ce que vous pouvez mettre un exemple de matches svp. Merci
    • Du genre de celui qui se trouve ;-)