Table des matières
2. Tableaux et conteneurs
3. Création et initialisation de tableaux
4. Les tableaux et les génériques
5. Tableaux et types de paramètres variables
Maison Java javaDidacticiel Résumé des exemples de code de tableau Java

Résumé des exemples de code de tableau Java

Mar 14, 2017 am 11:54 AM


Résumé :

Cet article explique principalement les connaissances sur les tableaux en Java, principalement Les tableaux seront abordés en détail sous cinq aspects : les tableaux et les conteneurs, la création et l'initialisation des tableaux, les tableaux et les génériques, les tableaux et les paramètres variableslistes, et les fonctions pratiques des classes d'outils de Array Description et résumé.


1. Points clésAperçu

  • Tableaux et conteneurs

  • Création et création des tableaux Initialisation

  • Tableaux et génériques

  • Tableaux et listes de paramètres variables

  • Classe d'outils Tableaux Résumé des fonctions pratiques


2. Tableaux et conteneurs

En Java, les tableaux et les conteneurs Vous peut contenir des objets , alors quelle est la différence entre les tableaux et les conteneurs ? Lorsque nous devons contenir des objets, dans quelles circonstances devons-nous donner la priorité aux tableaux et dans quelles circonstances devons-nous donner la priorité aux conteneurs ?


Dans la version initiale de Java, les tableaux de taille fixe étaient absolument nécessaires, non seulement parce que les concepteurs Java ont choisi d'inclure des types primitifs dans Java et certaines considérations basées sur les performances, mais aussi à cause de la version initiale a très peu de support pour les conteneurs. Par conséquent, dans les premières versions de Java, il est toujours raisonnable de choisir d'inclure des tableaux, notamment dans les trois aspects suivants :

  • Efficacité

    En Java, Les tableaux sont le moyen le plus efficace de stocker et d'accéder de manière aléatoire à des séquences d'objetsréférences. Un tableau est une séquence linéaire simple, qui rend l’accès aux éléments très rapide. Cependant, le prix payé pour cette vitesse est que la taille de l'objet tableau est fixe et ne peut pas être modifiée pendant sa durée de vie. Étant donné qu'ArrayList peut réaliser une allocation automatique d'espace et est plus flexible, nous devrions généralement préférer ArrayList au tableau, mais cette flexibilité nécessite une surcharge. Par conséquent, ArrayList est beaucoup moins efficace que les tableaux.

  • Type

    Avant JDK 1.5, Java n'introduisait pas de génériques. Par conséquent, lors de la manipulation d'objets, les classes de conteneurs avant les génériques les traitent comme n'ayant pas de type spécifique, c'est-à-dire que ces objets sont traités comme des Object. La raison pour laquelle les tableaux sont meilleurs que les conteneurs avant les génériques est que vous pouvez créer un tableau pour contenir un type spécifique. Cela signifie que vous pouvez empêcher l'insertion de types incorrects et l'extraction de types inappropriés via la vérification de type au moment de la compilation. Bien sûr, Java vous empêchera d'envoyer des messages inappropriés aux objets, à la fois au moment de la compilation et au moment de l'exécution. Ce n'est donc pas celle qui est la moins sûre, mais elle sera plus élégante si des erreurs peuvent être signalées lors de la compilation.

  • La possibilité de sauvegarder les types de base

     Les tableaux peuvent contenir des types de base, mais les conteneurs avant les génériques ne le peuvent pas.

    Après JDK 1.5, Java a introduit les génériques et les mécanismes d'empaquetage automatiques (les génériques peuvent assurer la production de conteneurs de type sécurisé, et les mécanismes d'empaquetage automatiques permettent aux conteneurs de contenir des types de base), ce qui fait que les conteneurs d'aujourd'hui éclipsent les tableaux dans tous les aspects, à l'exception des performances. De plus, les génériques sont une grande menace pour les tableaux, et généralement les deux ne peuvent pas être bien combinés (les tableaux avec des types paramétrés ne peuvent pas être instanciés) .

    Par conséquent, lorsque nous programmons en utilisant des versions Java récentes , devrait préférer les conteneurs aux tableaux. Nous devrions refactoriser notre programme pour utiliser des tableaux uniquement s'il a été prouvé que les performances sont un problème et que le passage aux tableaux améliorera les performances.


3. Création et initialisation de tableaux

1. Bases du tableau

  • L'identifiant du tableau est juste un référence , pointant vers un objet réel créé dans le tas. Cet objet est utilisé pour enregistrer des références à d'autres objets ou valeurs de types de base

  • les tableaux d'objets enregistrent les références et le type de base. tableaux directement Enregistrer les valeurs de type de base ;

  • La syntaxe "[ ]" est le seul moyen d'accéder aux objets du tableau ;


2. Créer et initialiser

  • est implicitement créé dans le cadre de l'initialisation du tableau

String[] strs = { ... };    
// 创建方式 1 --- 花括号内对象的个数就是数组大小System.out.println(strs.length);    
// 输出 0
Copier après la connexion
String[] strs = new String[5];  
//创建方式 2String[] ss = new String[]{ ... };   
//创建方式 3
Copier après la connexion

3. Tableau multidimensionnel

L'essence du tableau multidimensionnel : Les éléments du tableau sont toujours des tableaux

// 创建方式 1int[][] a = { 
{ 1, 2, 3, }, 
{ 4, 5, 6, }, 
}; 

// 创建方式 2int[][][] a = new int[2][2][4];//粗糙数组:每个向量具有任意长度Random rand = new Random(47); 

// 3-D array with varied-length vectors: int[][][] a = new int[rand.nextInt(7)][][]; 

for(int i = 0; i < a.length; i++) { 
    a[i] = new int[rand.nextInt(5)][]; 
    for(int j = 0; j < a[i].length; j++) 
        a[i][j] = new int[rand.nextInt(5)]; 
}
Copier après la connexion

4. Les tableaux et les génériques

  • Les tableaux et les génériques ne peuvent pas être bien combinés, c'est-à-dire qu'ils ne peuvent pas l'être. instancié avec paramétrage Tableau de type

T[] first = new T[3];    
// ERROR  A<String>[] arrays = new A<String>[4];    
// ERROR: Cannot create a generic array of A<String>
Copier après la connexion
  • peut créer une référence de tableau générique

A<String>[] arrays;    
// OK
Copier après la connexion
  • Les tableaux sont covariants

Object[] objs = new String[3];      
// OK
Copier après la connexion

En bref, Les conteneurs génériques sont toujours un meilleur choix que les tableaux génériques.


5. Tableaux et types de paramètres variables

1. Le concept de types de paramètres variables

Java SE5 ajoute des types de paramètres variables (Variable Argument Type), sous la forme de "Type... args", ne peut être utilisé que comme paramètres de méthode . La liste des paramètres variables convient aux situations où le nombre de paramètres est incertain mais le type est certain (java traite les paramètres variables comme un tableau). Une attention particulière doit être portée au fait que la liste des paramètres variables doit être le dernier élément (c'est-à-dire qu'un seul paramètre variable est pris en charge au maximum). Lorsqu'il y a plus d'une liste de paramètres variables, l'une des variables ne doit pas être le dernier élément, donc un seul paramètre variable est pris en charge. Étant donné que le nombre de paramètres dans la liste des paramètres variables est incertain, lorsqu'il y a des paramètres du même type derrière, Java ne peut pas distinguer si le paramètre transmis appartient au paramètre variable précédent ou au paramètre suivant, il ne peut donc placer que le paramètre variable. à la fin. Un élément.

// 代码示例public class TestVarArgus {  
    public static void dealArray(int... intArray){  
        for (int i : intArray)  
            System.out.print(i +" ");  

        System.out.println();  
    }  

    public static void main(String args[]){  
        dealArray();  
        dealArray(1);  
        dealArray(1, 2, 3);  
    }  
}/* Output:

        1   
        1 2 3   
 *///:~
Copier après la connexion

La liste des paramètres des variables a les caractéristiques suivantes :

  • ne peut apparaître qu'à la fin de la liste des paramètres de la méthode ;

  • se trouve dans le type variable et le nom de la variable peut être avec ou sans espaces

  • Lors de l'appel de la méthode avec des paramètres variables, le compilateur will Le paramètre variable crée implicitement un tableau, nous pouvons donc accéder à la liste des paramètres variables sous la forme d'un tableau dans le corps de la méthode (le compilateur traite le paramètre variable comme un tableau) .


2. Compatibilité des types de paramètres variables et des tableaux

  • Le compilateur considère que le type de tableau et le type de paramètre variable sont identiques, c'est-à-dire qu'ils ne peuvent pas surcharger

public class TestVarArgus {  
    public static void dealArray(int... intArray){  
        for (int i : intArray)  
            System.out.print(i +" ");  

        System.out.println();  
    }  

    //ERROR : Duplicate method dealArray(int[]) in type TestVarArgus 
    public static void dealArray(int[] intArray){    
        for (int i : intArray)  
            System.out.print(i +" ");  

        System.out.println();  
    }  

    public static void main(String args[]){  
        dealArray();   
        dealArray(1);  
        dealArray(1, 2, 3);  
    }  
}
Copier après la connexion

<🎜 ; >
  • Les paramètres variables sont compatibles avec les paramètres de type tableau, mais les paramètres de type tableau ne sont pas compatibles avec les paramètres variables

  • <🎜 ; >
 
// 代码示例 1 : 给参数为可变参数类型的方法传递数组public class TestVarArgus {  
    public static void dealArray(int... intArray){  
        for (int i : intArray)  
            System.out.print(i +" ");  

        System.out.println();  
    }  

    public static void main(String args[]){  
        int[] intArray = {1, 2, 3};  

        dealArray(intArray);  // OK
    }  
}
Copier après la connexion
En fait, pour l'exemple de code 2, vous n'avez besoin que d'une méthode définie comme dealArray(int, int, int) ou d'une méthode définie comme dealArray(int...). Par conséquent, il est naturellement impossible de faire correspondre la méthode dealArray(int[]) avec les paramètres de type tableau.
// 代码示例 2 : 给参数为数组类型的方法传递可变参数public class TestVarArgus {  
    public static void dealArray(int[] intArray){  
        for (int i : intArray)  
            System.out.print(i +" ");  

        System.out.println();  
    }  

    public static void main(String args[]){  
        dealArray(1, 2, 3);     // ERROR
    }  
}
Copier après la connexion


  • Principe de correspondance des paramètres : s'il peut correspondre aux méthodes de longueur fixe, alors

    donnera la priorité à correspondant à cette méthode ;

    public class TestVarArgus { //含有不定参数的那个重载方法是最后被选中的public static void dealArray(int... intArray){  
        System.out.println("Bad");  
    }  
    
    public static void dealArray(int count, int count2){  
        System.out.println("Bingo");  
    }  
    
    public static void main(String args[]){  
        dealArray(1, 2);  
    }  
    } /* Output:
            Bingo 
    *///:~
    Copier après la connexion

  • Même notre principal familier

    fonction Le paramètre peut également être réécrit en un type de paramètre variable : public static void main(String... args) .

  • 6. Fonctions pratiques de la classe d'outils Arrays

1.
FunctionIntroductionNote
System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束若复制对象数组,那么只是复制了对象的引用,而不是对象本身的拷贝(浅复制);该方法不会执行自动包装和自动拆包,所以两个数组必须具有相同的确切类型;须明确自行新建立一个数组对象,作为副本
copyOf(T[] original, int newLength)复制指定的数组,截取或用 null 填充底层调用的还是 System.arraycopy;返回一个新的数组对象,若新数组的长度超过原数组的长度,则保留数组默认值

 
注意:

 对于以上两个方法:

  • 若复制对象数组,那么只是复制了对象的引用,而不是对象本身的拷贝;

  • 这两个方法不会执行自动包装和自动拆包,所以两个数组必须具有相同的确切类型。


2、数组的字符串方式表示

方法: Arrays.toString(Object[] a) / Arrays.deepToString(Object[] a)

作用: 返回指定数组内容的字符串表示形式:前者适用于一维数组,或者适用于多维数组


3、数组的比较

方法: Arrays.equals(Object[] a, Object[] a2) / deepEquals(Object[] a1, Object[] a2) (多维)

作用: 比较两个数组:元素类型相同,元素个数相等,对应位置的元素相同;

注意:

  • 通过对每个元素使用 equals() 作比较来判断;

  • 对于基本类型,使用的是基本类型的包装器类的 equals() 方法(对于 int 类型使用 Integer.equals() 作比较);

  • 使用 equals() 方法比较原则:是不是同一个对象,是不是同一个类型,是不是具有相同的内容。

int[] a1 = new int[10]; 
int[] a2 = new int[10]; 
Arrays.fill(a1, 47); 
Arrays.fill(a2, 47); 
print(Arrays.equals(a1, a2));    //true
Copier après la connexion

4、数组的排序

  使用内置的排序方法,就可以对任意的基本类型数组排序;也可以对任意的对象数组进行排序,只要该对象实现了 Comparable 接口或具有相关联的 Comparator (独立的实现该接口的类)。

方法: Arrays.sort(Object[] a) / Arrays.sort(Object[] a, int fromIndex, int toIndex)
   Arrays.sort(T[] a, Comparatorsuper T> c) / Arrays.sort(T[] a, int fromIndex, int toIndex, Comparator c)

作用: 对数组内元素进行升序排序 (默认)

String[] sa = Generated.array(new String[20], new RandomGenerator.String(5)); 

// 利用 String 内置的比较器(已实现 Comparable 接口):字典序(大写字母开头的词都放在前面输出,之后才是小写字母开头的词)Arrays.sort(sa);   
// ... ,WHkjU, YNzbr, bkIna, cQrGs, ....
// 利用 Comparator 比较 : Collections.reverseOrder() : 现有顺序的逆序Arrays.sort(sa, Collections.reverseOrder()); 

// 利用 Comparator 比较 : String.CASE_INSENSITIVE_ORDER : 忽略大小写将单词一起进行排序Arrays.sort(sa, String.CASE_INSENSITIVE_ORDER);
Copier après la connexion

  Java 标准类库中的排序算法针对正排序的特殊类型进行了优化 ———— 针对基本类型设计的“快排” 和 针对对象设计的“稳定归并排序”。所以,无需担心排序的性能,除非你可以证明排序部分的确是程序效率的瓶颈。


5、在已排序的数组中查找

  若数组已经 排好序,就可以使用该方法执行快速查找;若对未排序的数组使用该方法,将产生不可预料的结果。

方法: binarySearch(Object[] a, Object key) / binarySearch(T[] a, T key, Comparator c)

作用: 使用 二分搜索来搜索指定数组,以获得指定对象。在进行此调用之前,必须根据元素的自然顺序对数组进升序排序(通过 sort(Object[]) 方法); 使用二分搜索法来搜索指定数组,以获得指定对象。在进行此调用之前,必须根据指定的比较器(通过 sort(T[], Comparator) 方法)对数组进行多态升序排序

注意:


6. Remplir le tableau

Méthode : fill(Object[] a, Object val)
Fonction : ne peut remplir chaque position qu'avec la même valeur, et pour les objets, il s'agit de copier la référence du même objet à remplir


7. Conversion entre tableaux et conteneurs

Méthode : asList(T… a)
Fonction : Renvoie un Liste de taille fixe prise en charge par le tableau spécifié
Remarque :


7.Résumé

Principes :

  • Préférez utiliser des conteneurs plutôt que des tableaux

  • Utilisez des tableaux et des paramètres variables lors de la création paramètres de méthode, donner la priorité à l'utilisation de paramètres variables rendra le programme plus découplé. Obtenez deux fois le résultat avec la moitié de l'effort de programmation ;

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Générateur de nombres aléatoires en Java Générateur de nombres aléatoires en Java Aug 30, 2024 pm 04:27 PM

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Horodatage à ce jour en Java Horodatage à ce jour en Java Aug 30, 2024 pm 04:28 PM

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Programme Java pour trouver le volume de la capsule Programme Java pour trouver le volume de la capsule Feb 07, 2025 am 11:37 AM

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4

See all articles