Maison > Java > javaDidacticiel > Java comprend la copie de tableau via le code source sous-jacent

Java comprend la copie de tableau via le code source sous-jacent

WBOY
Libérer: 2022-07-22 16:42:59
avant
1827 Les gens l'ont consulté

Cet article vous apporte des connaissances pertinentes sur java Il présente principalement l'analyse détaillée de la compréhension de la copie de tableau à travers le code original sous-jacent, y compris la copie en boucle du tableau, la méthode Arrays.copyOf, la méthode Arrays.copyofRange, etc. au contenu ci-dessous, j’espère que cela sera utile à tout le monde.

Java comprend la copie de tableau via le code source sous-jacent

Étude recommandée : "Tutoriel vidéo Java"

Boucle pour copier un tableau

Utiliser une boucle pour copier un tableau est très simple, c'est-à-dire utiliser une boucle pour attribuer les éléments du tableau à copiés dans un nouveau tableau un par un. L'implémentation spécifique du code est la suivante :

public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        int[] copy = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            copy[i] = arr[i];
        }
    }
Copier après la connexion

C'est la méthode à laquelle nous pensons généralement. Voici quelques méthodes plus pratiques fournies par JAVA pour nous.

Méthode Arrays.copyOf

Parce que je copie un tableau d'entiers, j'utilise donc la méthode Arrays.copyOf pour copier un tableau d'entiers. Des tableaux d'autres types peuvent également être copiés, pas seulement des tableaux d'entiers.

Ce qui suit explique la méthode Arrays.copyOf en copiant un tableau d'entiers. Jetons d'abord un coup d'œil au code original sous-jacent de la méthode Arrays.copyOf :

public static int[] copyOf(int[] original, int newLength) {
        int[] copy = new int[newLength];
        System.arraycopy(original, 0, copy, 0,
                         Math.min(original.length, newLength));
        return copy;
    }
Copier après la connexion

Nous pouvons voir que la valeur de retour de la méthode Array.copyOf est. un tableau d'entiers et le paramètre formel a deux paramètres, l'un est un tableau d'entiers et l'autre est une variable entière.

Le tableau entier dans le paramètre formel est le nom du tableau que nous voulons copier

La variable entière dans le paramètre formel est la longueur du tableau que nous voulons copier

Parce qu'il y a une valeur de retour, nous utilisons la méthode Arrays.copyOf À ce stade, un tableau est requis pour recevoir la valeur de retour. Le code est implémenté comme suit :

public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        int[] copy =Arrays.copyOf(arr,arr.length);
    }
Copier après la connexion

Remarque : La longueur de la copie peut dépasser la longueur du tableau à copier. Si elle dépasse la longueur du tableau à copier, la valeur de l'élément supplémentaire sera 0 ; par exemple : je veux copier le tableau arr, mais la taille du tableau arr est de 5. Si je modifie arr.length*2 lors de la copie, alors la taille du tableau copié deviendra 10 et la valeur de 6~10 les éléments seront 0. Ceci est également considéré comme une expansion.

Méthode Arrays.copyofRange

Si nous voulons copier une partie d'un tableau, nous pouvons utiliser la méthode Arrays.copyRange. Comme ci-dessus, nous utilisons également la copie d'un tableau d'entiers pour expliquer. Jetons d'abord un coup d'œil à son code original sous-jacent :

public static int[] copyOfRange(int[] original, int from, int to) {
        int newLength = to - from;
        if (newLength < 0)
            throw new IllegalArgumentException(from + " > " + to);
        int[] copy = new int[newLength];
        System.arraycopy(original, from, copy, 0,
                         Math.min(original.length - from, newLength));
        return copy;
    }
Copier après la connexion

Nous pouvons voir à partir du code original de Arrays.copyRange que la valeur de retour est un tableau d'entiers, et le paramètre formel est un tableau d'entiers, deux variables entières.

Le tableau d'entiers dans le paramètre formel est le nom du tableau à copier.

Les deux variables entières de et vers dans le paramètre formel sont la plage des éléments du tableau que vous souhaitez copier. [formulaire, to). La gauche est fermée et la droite est ouverte, à l'exclusion de l'élément à cette position. Le code est implémenté comme suit :

public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        int[] copy = Arrays.copyOfRange(arr,1,3);
    }
Copier après la connexion

Remarque : l'indice du tableau commence à 0 et les éléments de 1 à 3 font référence à 2, 3 et 4. Cependant, le côté droit est un intervalle ouvert, donc 4 n'est pas inclus , donc la connaissance du tableau est copiée Les deux éléments 2 et 3.

Méthode System.arraycopy

Parlons ensuite de la méthode System.arraycopy. En fait, des étudiants attentifs ont découvert qu'il existe une méthode System.arraycopy dans le code original des deux premières méthodes, et que leur couche inférieure repose également sur. Méthode System.arraycopy à réaliser. Jetons d'abord un coup d'œil à son code original sous-jacent

public static native void arraycopy(Object src,  int  srcPos,
                                        Object dest, int destPos,
                                        int length);
Copier après la connexion

System.arraycopy ne peut pas voir le code original de l'implémentation La raison en est que sa couche sous-jacente native est implémentée en C/C++. Mais l’avantage de la méthode native est qu’elle s’exécute très rapidement. Le code est implémenté comme suit :

public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        int[] copy = new int[arr.length];
        System.arraycopy(arr,0,copy,0,arr.length);
    }
Copier après la connexion

À ce stade, l'intégralité du tableau de arr est copiée. Si vous souhaitez faire une copie partielle, vous pouvez terminer la copie partielle en modifiant les paramètres formels

méthode de clonage

. la dernière est la méthode array name.clone. Cette méthode comprend Ça y est, le code est implémenté comme suit :

public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        int[] copy = arr.clone();
    }
Copier après la connexion

La copie est terminée Cette méthode produit principalement une copie de l'objet, mais l'adresse est toujours différente.

Apprentissage recommandé : "Tutoriel vidéo Java"

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!

Étiquettes associées:
source:jb51.net
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal