Maison  >  Article  >  Java  >  La différence et la connexion entre Array et ArrayList

La différence et la connexion entre Array et ArrayList

巴扎黑
巴扎黑original
2017-06-26 10:22:592271parcourir

Le blogueur s'est rendu aujourd'hui à un entretien de stage Java et a découvert que bon nombre des structures de données les plus élémentaires de Java n'étaient pas familières au blogueur. Lorsque l'intervieweur a posé des questions sur certaines structures de données courantes telles que HashMap, le blogueur a pu répondre. clair et logique, mais après avoir posé des questions sur la différence et le lien entre Array et ArrayList, le blogueur était confus. Bon, pas grand chose à dire, il suffit de régler le problème maintenant.

Tout d'abord, Array est un tableau en Java. Il existe trois façons de déclarer un tableau en Java :

1 int[] a = new int[10]; 2 int a[] = new int[10]; //这种方式同c语言一样3 int a[] = {1,2,3,4};

Comme le montre ce qui précède. déclaration, Lorsque nous définissons un tableau, nous devons spécifier le type de données du tableau. En d'autres termes, le tableau est une collection du même type de données. De plus, lors de la déclaration du tableau, nous déclarons également la taille du tableau et le nombre d'éléments du tableau est fixe.

Ensuite, regardons l'application des tableaux :

 1 import java.util.Arrays; 2  3 /** 4  * @author jy 5  * @time 下午7:59:26 6  */ 7 public class ArrayAndArrayList { 8     public static void main(String[] args) { 9         10      int a[] = new int[4];11      System.out.println(a.length);  //数组的长度属性12      13      int b[] = {1,2};14      int c[] = {1,2};15      System.out.println(b.equals(c));  //输出为false,可见数组并没有重写hashcode()和equals()方法16      System.out.println(Arrays.equals(b, c));  //利用java.util.Array的equals()来判断数组是否相等,这里输出true17      System.out.println(isEquals(b,c));18      19     }20 21     /**22      * 重写方法来手动实现数组之间的比较方法23      */24     public static boolean isEquals(int[] b, int[] c) {25         26         if(b == null || c == null){27             return false;28         }29         if(b.length != c.length){30             return false;31         }32         for (int i = 0; i < c.length; i ++) {33             if(b[i] != c[i]){34                 return false;35             }36         }37         return true;38     }39     40 }

On peut voir que la longueur du tableau est fixe et immuable. Les tableaux ne remplacent pas les méthodes hashcCode() et equals() de l'objet.

Nous savons tous que les tableaux peuvent aussi être bidimensionnels. Voyons comment un tableau bidimensionnel est déclaré :

1 int[][] da = new int[2][3];  //推荐用这种声明方式,更能表明数组的类型2 int db[][] = new int[4][3];

Cependant, il y a un changement. Tableau long à deux dimensions :

1 int[][] dc = new int[2][];  //第一维的大小不能空缺,第二维的大小可以是不一样的。2 dc[0] = new int[2];3 dc[1] = new int[3];

D'accord, arrêtons-nous ici pour l'application de la structure de données de base du tableau. Afin de mettre en évidence le thème, nous aborderons d'autres sujets non pertinents. Plus de bêtises.

Ensuite, jetons un coup d'œil à la collection ArrayList :

ArrayList est un tableau dynamique, qui est une version complexe d'un tableau. Il peut ajouter et supprimer dynamiquement. éléments. ArrayList Implémente l'interface java.util.Collections.Collection.List. Jetons un coup d'œil à la déclaration la plus basique :

ArrayList list = new ArrayList(10);  
ArrayList<Integer> list1 = new ArrayList<Integer>();

Dans la première déclaration, sans utiliser de génériques, cette liste peut être ajoutée à différents éléments Type, et arraylist le fait pas besoin de préciser la longueur. Lorsque nous utilisons des génériques, nous ne pouvons ajouter qu’un seul type de données.

Les méthodes et propriétés importantes d'ArrayList sont affichées dans le code suivant :

 ArrayList<Integer> list =  ArrayList<Integer>         list.add(1         list.add(2         list.add(3         list.remove(1         Object[] p = list.toArray();           System.out.println(p[0         System.out.println(list.contains(4));           System.out.println(list.size());           System.out.println(list.get(0));

Ce qui précède montre quelques méthodes importantes d'ArrayList. Ci-dessous, nous comparons ces deux classes de collection :

(1) ArrayList est une version complexe de Array
ArrayList encapsule en interne un tableau de type Object. D'une manière générale, il est différent d'un tableau. La différence est que de nombreuses méthodes d'ArrayList, telles que Index, IndexOf, Contains, Sort, etc., appellent directement les méthodes correspondantes d'Array en fonction du tableau interne.

(2) Types de données stockés

ArrayList peut stocker des objets hétérogènes, tandis que Array ne peut stocker que des données du même type de données.

(3) Longueur variable

La longueur du tableau est en fait immuable. La longueur réelle d'un tableau bidimensionnel de longueur variable est également fixe. Ce qui est variable est la longueur des éléments. . La longueur d'ArrayList peut être spécifiée (même si la longueur est spécifiée, elle sera automatiquement étendue 2 fois) ou non spécifiée, et sa longueur est variable.

(4) Accéder, ajouter et supprimer des éléments

Pour les types référence généraux, cette partie n'a pas un grand impact, mais pour les types valeur, l'ajout et la modification d'éléments à ArrayList , entraîneront un emballage et les opérations de déballage et les opérations fréquentes peuvent affecter une certaine efficacité. De plus, ArrayList est un tableau dynamique, qui n'inclut pas d'algorithmes pour un accès rapide via Key ou Value, donc en fait appeler des méthodes telles que IndexOf et Contains est une simple boucle pour trouver des éléments, donc appeler fréquemment de telles méthodes n'est pas mieux que d'écrire Effectuer une boucle et optimiser un peu est plus rapide. Si vous avez cette exigence, il est recommandé d'utiliser une collection de paires clé-valeur telles que Hashtable ou SortedList.

D'accord, c'est tout pour la comparaison de ces deux structures de données. S'il y a quelque chose qui ne va pas et qui vous semble le bienvenu, veuillez me corriger.

De plus, c'est la première fois que j'écris un blog, alors soyez gentil.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Un algorithme Java simpleArticle suivant:Un algorithme Java simple