2 votes

Quel type de tableau devrait être utilisé en JAVA et pourquoi ?

Je suis en train d'apprendre le JAVA et j'ai découvert les méthodes suivantes pour utiliser un tableau dans une classe. Quelle est la différence entre elles et laquelle est la plus pratique à utiliser à l'avenir?

ArrayList quizGrades = new ArrayList();
quizGrades.add(95);
quizGrades.add(87);
quizGrades.add(83);

ou

int[] quizGrades = new int[3];
quizGrades[0] = 95;
quizGrades[1] = 87;
quizGrades[2] = 83;

2voto

Aditya K Points 406
ArrayList quizGrades = new ArrayList();

ArrayList est une structure de données dans le framework Collections.

Vous devez utiliser arraylist lorsque vous ne connaissez pas la taille du tableau à l'avance. Array list redimensionne dynamiquement le tableau (opérations d'insertion et de suppression).

En revanche,

int[] quizGrades = new int[1] 

ne redimensionne pas le tableau et vous devez fournir la taille à l'avance. De plus, la suppression des éléments devient fastidieuse et il est préférable d'utiliser Arraylist si vous supprimez des éléments.

C'est la principale différence. Vous pouvez en savoir plus sur les temps d'insertion, de suppression en visitant, https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html

0voto

boskoop Points 782

Le ArrayList est une classe dans le framework Java Collections tandis que le int[] est un type de tableau spécial en Java.

ArrayList est internalement soutenu par un tableau et permet de redimensionner la longueur du tableau, tandis que le int[] ne peut pas être modifié en longueur une fois initialisé.

Je vous recommanderais pour le moment de vous en tenir à ArrayList car il est beaucoup plus pratique à utiliser et il y a un grand support dans le framework Collections pour manipuler vos données.

Les tableaux ont l'avantage d'avoir une empreinte mémoire plus petite et d'être légèrement plus efficaces lorsqu'on accède directement aux valeurs dans le tableau. Après tout, ArrayList utilise un tableau en interne, ce qui ajoute un petit surcoût. Mais dans 99% des cas, ce surcoût de performance n'est pas un problème dans votre application métier car le goulot d'étranglement se trouve ailleurs (réseau, base de données, etc.).

En résumé: En tant que débutant, vous devriez probablement vous en tenir à ArrayList et n'utiliser des tableaux que si vous voulez apprendre à travailler avec eux ou si vous êtes contraint de les utiliser.

0voto

JasonM1 Points 2711

La classe List et la structure de données primitive array en Java sont toutes deux des mécanismes permettant de stocker et d'accéder à une collection d'objets. La classe ArrayList est une implémentation redimensionnable de l'interface List où, en interne, l'ArrayList a un tableau d'objets.

Les APIs Java ont souvent des méthodes qui nécessitent soit un tableau d'objets soit une List, il existe donc des mécanismes en Java pour convertir un tableau primitif en une List et vice versa.

Converting primitive Array to a List

Utilisez Arrays.asList() pour convertir un tableau en une List.

Integer[] array = new Integer[] { 95, 87, 83 };
List list = Arrays.asList(array);
System.out.println(list); // [95, 87, 83]

Converting List to a primitive Array

Si vous souhaitez convertir une List en un tableau, utilisez la méthode toArray().

Integer[] array2 = list.toArray(new Integer[array.size()]);

De même, si vous souhaitez convertir des valeurs int primitives en List, vous pouvez simplement itérer sur les valeurs et les ajouter.

   int[] array3 = new int[] { 95, 87, 83 };
   List list3 = new ArrayList(array3.length);
   for(int val : array3) {
       list3.add(val);
   }
   System.out.println(list3); // [95, 87, 83]

Similitudes et différences entre List et tableau primitif

Les List et les tableaux primitifs ont tous les deux le premier élément avec un index de 0 et le nième élément a un index de n - 1. Accéder à un élément avec un index inférieur à 0 ou supérieur à n-1 entraîne une exception : IndexOutOfBoundsException dans la liste ou ArrayIndexOutOfBoundsException dans le cas du tableau.

Obtenir et définir des éléments dans un tableau primitif

int grade = array[0];
array[0] = 98;
int len = array.length; // nombre d'éléments dans le tableau
grade = array[-1]; // lance ArrayIndexOutOfBoundsException

Obtenir et définir des éléments dans une List

int grade = list.get(0);
list.set(0, 98);
int len = list.size(); // nombre d'éléments dans la liste
grade = list.get(-1); // lance IndexOutOfBoundsException

Sauf si la liste est immuable (ou en lecture seule), vous pouvez ajouter ou supprimer des éléments. Voir Collections.unmodifiableList(). Pour agrandir/rétrécir un tableau primitif, vous devez créer un nouveau tableau et copier les anciens éléments du vieux vers le nouveau tableau.

En général, les tableaux primitifs et les List sont sémantiquement équivalents mais avec une syntaxe différente. Une forme peut être convertie en l'autre.

0voto

davidh Points 107

ArrayList contient le mot array. Ce n'est pas une coïncidence.
En fait, ArrayList est une implémentation de tableau redimensionnable de l'interface List.
Sous le capot, il utilise un tableau pour représenter les données.

Dans la plupart des cas, il est préférable d'utiliser un ArrayList plutôt qu'un tableau car il fournit des méthodes très courantes pour manipuler l'ensemble d'éléments (add(), addAll(), remove(), set(), etc...) que vous devez effectuer manuellement avec un tableau.

En plus, il libère les développeurs de se soucier de la taille de l'ensemble d'éléments qu'il manipule et du traitement lié à l'augmentation / diminution de la capacité de l'ensemble d'éléments lorsque la taille réelle atteint la taille déclarée initialement.

En effet, avec un tableau, la taille est fixée. Ainsi, vous devez la connaître et la spécifier lors de sa déclaration comme dans votre exemple : int[] quizGrades = new int[1];.

En outre, si la taille initiale n'est pas suffisante pour stocker de nouveaux éléments, vous devez faire une copie des données du tableau dans un autre tableau plus grand. C'est finalement ce que fait pour vous la classe ArrayList lorsqu'elle grandit.

Alors, quand utiliser un tableau ?

Généralement lorsque vous avez besoin d'effectuer des optimisations très fines.
Pour les développeurs d'applications, le besoin est plutôt rare.

Voici quelques cas d'utilisation :

  • vous voulez éviter le petit surcoût causé par l'enveloppe ArrayList (CPU, mémoire)

  • vous voulez utiliser les types primitifs car c'est suffisant et vous avez besoin d'économiser chaque octet potentiellement consommé.
    Les valeurs primitives occupent moins de mémoire que les valeurs enveloppées.
    Les tableaux acceptent les valeurs primitives. Les classes List et Collection non.

  • vous voulez maîtriser le stockage et la récupération des données de l'ensemble d'éléments. Cela inclut des règles sur l'augmentation et la diminution de la capacité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X