La classe Arrays contient diverses méthodes destinées à manipuler les tableaux Java.

La classe Arrays est statique et donc ne peut être instanciée. Elle contient essentiellement des méthodes statiques.

[Type valeur = ]Arrays.methodeStatique(tableau[, autreArguments]);

Toutes les méthodes de cette classe sont susceptibles de lever une exception NullPointerException, si le tableau sur lequel doit s'appliquer une opération, est la valeur null.

int[] tableau = null;
Arrays.methodeStatique(tableau, args);
// L'exception NullPointerException est levée par la méthode

Les méthodes permettent notamment d'effectuer des recherches et du tri dans un tableau.

Les méthodes sort() sont capables de trier les éléments du tableau spécifié, selon un ordre ascendant. Tous les éléments ayant un type primitif numérique (byte, short, int, long, float et double) sont triés numériquement, y compris les caractères (char). Pour chaque type, il existe deux méthodes, la première triant tout le tableau, la seconde appliquant le tri à un intervalle donné du tableau.

int[] tableau = {8, 1, 6, 10, 9, 3, 7};
Arrays.sort(tableau);
// tri de l'intervalle [2, 5] soit {6, 1, 10, 9, 3}
Arrays.sort(tableau, 2, 5);

En ce qui concerne les objets, le tri peut être réalisé au moyen de quatre méthodes classée dans deux genres. La première catégorie applique un tri en accord avec l'ordre naturel des éléments, la seconde par rapport à un objet Comparator spécifié.

Dans le premier cas, tous les éléments du tableau doivent impérativement implémenter l'interface Comparable et doivent être mutuellement comparable, c'est-à-dire, qu'une exception ClassCastException ne doit pas être levée lors de l'appel de la méthode compareTo().

boolean res = elt1.compareTo(elt2);

Dans le second cas, un comparateur est passé en argument avec le tableau, afin d'indiquer à la méthode sort() le mode de tri à mettre en oeuvre sur ce tableau. Le comparateur spécifié inclus un algorithme de comparaison spécifique au type référence des objets du tableau. En outre, il est nécessaire que tous les éléments du tableau soient mutuellement comparables, sans quoi une exception ClassCastException risquerait d'être levée lors d'une tentative de comparaison.

import java.util.Arrays;
import java.util.Comparator;

public class programme {
  public static void main(String[] args) {
    Video[] tabObjets = {
      new Video("Voyage au bout de l'enfer", "Michael Cimino", 1978),
      new Video("Le jour le plus long", "Ken Annakin", 1962),
      new Video("Un pont trop loin", "Richard Attenborough", 1977),
      new Video("Platoon", "Oliver Stone", 1986),
      new Video("Full metal jacket", "Stanley Kubrik", 1987),
      new Video("La ligne rouge", "Terrence Malick", 1998),
      new Video("The patriot", "Roland Emmerich", 2000),
      new Video("Outrages", "Brian De Palma", 1990),
      new Video("Paris brûle-t-il ?", "René Clément", 1966),
      new Video("Tora ! Tora ! Tora !", "Richard Fleischer", 1970),
      new Video("Guerre et Paix", "King Vidor", 1956),
      new Video("Apocalypse now", "Francis Ford Coppola", 1979)
    };
    System.out.println("Tableau des objets Video :");
    for(int i = 0; i < tabObjets.length; i++)
      System.out.println(i + "\t: " + tabObjets[i]);

    System.out.println("Tri des objets par année :");
    Comparator comparateur = new Comparator(){
      public int compare(Object o1, Object o2){
        if(!(o1 instanceof Video))
        throw new ClassCastException();
        return (new Integer(((Video)o1).obtenirAnnee())).compareTo(
                  new Integer(((Video)o2).obtenirAnnee()));
      }
    };
    Arrays.sort(tabObjets, comparateur);
    for(int i = 0; i < tabObjets.length; i++)
      System.out.println(i + "\t: " + tabObjets[i]);
    
  }
}

A l'instar des méthodes de tri pour les types primitifs, il est possible également de spécifier un intervalle d'éléments à trier, au sein du tableau.

Arrays.sort(tabObjets, 3, 6, comparateur);

Les méthodes binarySearch() sont utilisées pour accomplir une recherche d'un élément spécifié au sein d'un tableau cible après que ce dernier eut été trié par la méthode sort() appropriée. En cas de réussite de la recherche, l'index de l'élément dans le tableau est retourné, dans le cas contraire, la valeur -1 est retournée. De même que pour les méthodes sort(), il existe autant de déclinaisons de binarySearch(), qu'il existe de types primitifs et du type référence Object.

char[] tableau = {'a', 'r', 'k', 'q', 'o', 's'};
Arrays.sort(tableau);
// tableau = {'a', 'k', 'o', 'q', 'r', 's'}
int res = Arrays.binarySearch(tableau, 'k');

Les objets peuvent être recherchés en fonction de leur ordre naturel ou par rapport à un comparateur fourni. Dans les deux cas, il est impératif que les éléments soient mutuellement comparables puisqu'ils ne pourraient être préalablement triés par la méthode sort().

Les méthodes fill() affectent un valeur donnée à tous ou un intervalle des éléments d'un tableau. Chaque type d'élément possède un jeu de méthodes à l'instar des méthodes précitées.

double tableau = new double[10];
Arrays.fill(tableau, 0.0);

String[] tableau = new String[100];
Arrays.fill(tableau, "");

Les méthodes equals() ont la fonction de tester l'égalité entre deux tableaux de même type. Si l'égalité des tableaux est effectives, la méthode equals() retourne true, sinon elle renvoie false. Une égalité effective est tributaire d'un nombre d'éléments équivalent et d'une correspondance stricte entre les paires d'éléments (ta[1] = tb[1], ta[2] = tb[2], etc..). Ainsi, pour assurer un même ordre aux deux tableaux à comparer, il peut être opportun de les trier préalablement.

float[] tab1 = {0.2f, 0.5f, 0.9f, 1.54f, 7.2f, 4.5f};
float[] tab2 = {0.2f, 0.5f, 0.9f, 1.54f, 7.2f, 4.5f};
float[] tab3 = {1.54f, 7.2f, 0.2f, 0.9f, 0.5f, 4.5f};
boolean res = Arrays.equals(tab1, tab2); // retourne true
boolean res = Arrays.equals(tab1, tab3); // retourne false
Arrays.sort(tab3);
boolean res = Arrays.equals(tab1, tab3); // retourne true

La méthode asList() constitue un pont entre les tableaux et les collections Java. En effet, cette méthode retourne une liste dont les éléments seront ceux du tableau spécifié en argument.

List liste = Arrays.asList(tableau);
Exemple [voir]
import java.util.Arrays;
import java.util.Comparator;

public class programme {
  public static void main(String[] args) {
    int[] tabEntiers = {10, 5, 2, 8, 6, 1, 78, 45, 12, 9};
    Video[] tabObjets = {
      new Video("Voyage au bout de l'enfer", "Michael Cimino", 1978),
      new Video("Le jour le plus long", "Ken Annakin", 1962),
      new Video("Un pont trop loin", "Richard Attenborough", 1977),
      new Video("Platoon", "Oliver Stone", 1986),
      new Video("Full metal jacket", "Stanley Kubrik", 1987),
      new Video("La ligne rouge", "Terrence Malick", 1998),
      new Video("The patriot", "Roland Emmerich", 2000),
      new Video("Outrages", "Brian De Palma", 1990),
      new Video("Paris brûle-t-il ?", "René Clément", 1966),
      new Video("Tora ! Tora ! Tora !", "Richard Fleischer", 1970),
      new Video("Guerre et Paix", "King Vidor", 1956),
      new Video("Apocalypse now", "Francis Ford Coppola", 1979)
    };
    Video[] tabCopie = new Video[tabObjets.length];
    for(int i = 0; i < tabObjets.length; i++)
      tabCopie[i] = tabObjets[i];
    
    if(Arrays.equals(tabObjets, tabCopie)){
      System.out.println("Les deux tableaux sont identiques !");
    }
        
    System.out.println("Tableau de valeurs entières :");
    for(int i = 0; i < tabEntiers.length; i++)
      System.out.println(i + "\t: " + tabEntiers[i]);
    System.out.println("Tableau des objets Video :");
    for(int i = 0; i < tabObjets.length; i++)
      System.out.println(i + "\t: " + tabObjets[i]);
    
    System.out.println("Tri numériques des valeurs entières :");
    Arrays.sort(tabEntiers);
    for(int i = 0; i < tabEntiers.length; i++)
      System.out.println(i + "\t: " + tabEntiers[i]);

    System.out.println("Tri des objets par année :");
    Comparator comparateur = new Comparator(){
      public int compare(Object o1, Object o2){
        if(!(o1 instanceof Video))
        throw new ClassCastException();
        return (new Integer(((Video)o1).obtenirAnnee())).compareTo(
                  new Integer(((Video)o2).obtenirAnnee()));
      }
    };
    Arrays.sort(tabObjets, comparateur);
    for(int i = 0; i < tabObjets.length; i++)
      System.out.println(i + "\t: " + tabObjets[i]);
    
    System.out.println("Affichage de la copie de tabObjets :");
    for(int i = 0; i < tabCopie.length; i++)
      System.out.println(i + "\t: " + tabCopie[i]);

    if(!Arrays.equals(tabObjets, tabCopie)){
      System.out.println("Les deux tableaux ne sont plus identiques !");
    }
  }
}

// Classe Video
import java.util.GregorianCalendar;
import java.util.Calendar;

public class Video implements Comparable {
  private String titre, realisateur;
  private int annee;
  
  public Video(){
    this("Inconnu", "Inconnu", 0);
  }
    public Video (String[] infos) {
      this(infos[0], infos[1], Integer.parseInt(infos[3]));
    }
    public Video (String titre, String realisateur){
      this(titre, realisateur, (new GregorianCalendar()).get(Calendar.YEAR));
    }
  public Video (String titre, String realisateur, String annee){
    this(titre, realisateur, Integer.parseInt(annee));
  }
  public Video (String titre, String realisateur, int annee){
    if (titre == null || realisateur == null)
      throw new NullPointerException();
    this.titre = titre;
    this.realisateur = realisateur;
    this.annee = annee;
  }
  
  public String obtenirTitre(){
    return this.titre;
  }
  public String obtenirRealisateur(){
    return this.realisateur;
  }
  public int obtenirAnnee(){
    return this.annee;
  }

  public void fournirTitre(String titre){
    this.titre = titre;
  }
  public void fournirRealisateur(String realisateur){
    this.realisateur = realisateur;
  }
  public void fournirAnnee(int annee){
    this.annee = annee;
  }
  
  public int hashCode(){
    return annee * titre.hashCode() + realisateur.hashCode();
  }
  
  public boolean equals(Object o){
    if(!(o instanceof Video))
      return false;
    Video v = (Video)o;
    if(this.hashCode() == v.hashCode())
      return true;
    return false;
  }
  
  public int compareTo(Object o){
    if(!(o instanceof Video))
      throw new ClassCastException();
    Video v = (Video)o;
    int comparaison;
    if((comparaison = titre.compareTo(v.obtenirTitre())) != 0)
      return  comparaison;
    else if((comparaison = realisateur.compareTo(v.obtenirRealisateur())) != 0)
      return comparaison;
    else
      return (new Integer(annee)).compareTo(new Integer(v.obtenirAnnee()));
  }
  
  public String toString(){
    StringBuffer res = new StringBuffer("[");
    res.append(titre);
    res.append(", ");
    res.append(realisateur);
    res.append(", ");
    res.append(annee);
    return res.append("]").toString();
  }
}