java copy array how copy clone an array java
In deze zelfstudie over het kopiëren en klonen van arrays worden de verschillende methoden besproken om een array in Java te kopiëren:
Hier zullen we de kopieerbewerking van Java-arrays bespreken. Java biedt verschillende manieren om kopieën van array-elementen te maken. Zoals we weten, kunnen arrays in Java elementen van primitieve typen of objecten of verwijzingen bevatten.
Bij het maken van kopieën van primitieve typen is de taak vrij eenvoudig, maar als het om objecten of verwijzingen gaat, moet u opletten of de kopie diep of oppervlakkig is.
Bekijk hier de Java-beginnershandleiding.
Ondiepe kopie maakt een kopie van het element. Het is geen probleem als het om primitieve datatypes gaat. Maar als het om referenties gaat, kopieert een ondiepe kopie alleen de waarde en niet de onderliggende informatie.
Dus zelfs als u kopieën van elementen heeft gemaakt, zal een wijziging in de ene kopie ook doorwerken in een andere kopie, aangezien de geheugenlocaties worden gedeeld. Om dit te voorkomen, moet u voor een diepe kopie gaan waarin de geheugenlocaties niet worden gedeeld.
Wat je leert:
Kopieer en kloon Java-arrays
Met Java kunt u arrays kopiëren met behulp van de directe kopieermethode van java.util of de systeemklasse. Het biedt ook een kloonmethode die wordt gebruikt om een volledige array te klonen.
In deze zelfstudie bespreken we de volgende methoden voor het kopiëren en klonen van arrays.
- Handmatig kopiëren met for loop
- System.arraycopy () gebruiken
- Arrays.copyOf () gebruiken
- Arrays.copyOfRange () gebruiken
- Object.clone () gebruiken
Laten we onderzoeken!!
Handmatig kopiëren met For Loop
Normaal gesproken, wanneer we variabelen kopiëren, bijvoorbeeld a en b, voeren we de kopieerbewerking als volgt uit:
a = b;
Het zal niet correct werken als we dezelfde methode op arrays toepassen.
Laten we een programmeervoorbeeld bekijken.
Uitgang:
In het bovenstaande programma zijn er twee arrays, namelijk intArray en copyArray. De taak is om de inhoud van de intArray naar copyArray te kopiëren. Om dit te doen, wordt de instructie copyArray = intArray geïntroduceerd. Wat hier wordt gedaan, is dat de referenties van de array worden toegewezen. Dit is dus niet echt kopiëren.
Als resultaat van de bovenstaande instructie wordt de geheugenlocatie van de intArray ook gedeeld door de copyArray. Wanneer het element copyArray nu wordt opgehoogd, wordt die wijziging ook weerspiegeld in de intArray. Dit wordt weergegeven in de uitvoer.
Om dit probleem op te lossen, gebruiken we een methode om de array te kopiëren met for-lus. Hier wordt elk element van de oorspronkelijke array met een for-lus naar de nieuwe array gekopieerd.
Dit programma wordt hieronder getoond.
Uitgang:
Hier hebben we het vorige programma aangepast om for loop en inside for loop op te nemen, we wijzen elk element van intArray toe aan het corresponderende element van copyArray. Op deze manier worden de elementen daadwerkelijk gekopieerd. Dus wanneer een array wordt gewijzigd, worden de wijzigingen niet weerspiegeld in een andere array.
System.arraycopy () gebruiken
De systeemklasse van Java heeft een methode genaamd 'ArrayCOpy' waarmee u elementen van de ene array naar een andere array kunt kopiëren.
Het algemene prototype van deze methode is als volgt:
Hier,
- src_array => Source-array van waaruit de inhoud moet worden gekopieerd.
- src_Pos => De positie in de bronarray waar het kopiëren begint.
- dest_array => Bestemmingsarray waarnaar elementen moeten worden gekopieerd.
- dest_Pos => Startpositie in de bestemmingsarray voor de te kopiëren elementen.
- lengte => Lengte van de te kopiëren array.
Laten we deze methode eens nader bekijken met een voorbeeld.
Uitgang:
In het bovenstaande programma gebruiken we de ‘arraycopy’ -methode om een array naar een andere array te kopiëren. U kunt de aanroep van de arraycopy-methode zien. We kopiëren de source-array vanaf het begin (0thlocatie) en kopieer de volledige array.
Ten slotte tonen we het string-equivalent van zowel de bron- als de doelmatrix.
Met de arraycopy-methode kunt u zelfs gedeeltelijke arrays kopiëren, aangezien deze de begin- en eindelementposities als argumenten gebruikt. Deze methode maakt een ondiepe kopie van array-elementen.
Arrays.copyOf () gebruiken
De methode Arrays.copyOf () maakt intern gebruik van de methode System.arraycopy (). Hoewel het niet zo efficiënt is als arraycopy, kan het worden gebruikt om een volledige of gedeeltelijke array te kopiëren, net als de arraycopy-methode.
De ‘copyOf ()’ - methode maakt deel uit van het pakket java.util en behoort tot de klasse 'Arrays'.
Het prototype van deze methode is als volgt:
Waar,
- origineel: De array die naar de nieuwe array moet worden gekopieerd.
- nieuwLengte: De lengte van de gekopieerde array die moet worden geretourneerd.
Deze methode maakt dus een kopie van de array in het eerste argument tot de opgegeven lengte door de lengte af te kappen of op te vullen met 0 naar de nieuwe array. Dit betekent dat als de lengte van de gekopieerde array groter is dan de originele array, de nullen worden vervangen voor de overige elementen.
Het onderstaande programma toont een voorbeeld van de methode copyOf.
Uitgang:
In het bovenstaande programma kopiëren we de even_Array van lengte 4 met behulp van de copyOf-methode. Het tweede gegeven argument is 5. Daarom bevat de nieuw gekopieerde array 5 elementen. De eerste vier zijn hetzelfde als de originele array en het vijfde element is 0 omdat copyOf het opvult omdat de lengte van de originele array kleiner is dan die van de nieuwe array.
Arrays.copyOfRange () gebruiken
De methode Arrays.copyOfRange () wordt specifiek gebruikt wanneer u gedeeltelijke arrays wilt kopiëren. Net als de methode copyOf (), maakt deze methode intern ook gebruik van de methode System.arraycopy ().
Het prototype van de Arrays.copyOfRange () -methode is als volgt:
waar,
- origineel: De array waaruit een bereik moet worden gekopieerd.
- van: Initiële index van het te kopiëren bereik, inclusief.
- naar: De laatste index van het te kopiëren bereik, exclusief.
Een voorbeeldimplementatie van de methode copyOfRange wordt hieronder weergegeven.
Uitgang:
Object.clone () gebruiken
Java-array implementeert intern een Cloneable-interface en het is dus gemakkelijk om een Java-array te klonen. U kunt zowel eendimensionale als tweedimensionale arrays klonen. Wanneer u een eendimensionale array kloont, maakt het een diepe kopie van array-elementen die de waarden kopieert.
Aan de andere kant, wanneer u tweedimensionale of multidimensionale arrays kloont, wordt een ondiepe kopie van elementen gemaakt, d.w.z. alleen verwijzingen worden gekopieerd. Dit klonen van arrays wordt gedaan door de ‘Clone ()’ - methode die door de arrays wordt geleverd.
Een diepe kopie van 1-D-arrays als resultaat van klonen kan als volgt worden weergegeven:
Laten we nu het klonen van 1-D-array implementeren in een Java-programma.
Uitgang:
Zoals u in de uitvoer kunt zien, retourneert de uitdrukking om te controleren op gelijkheid van beide arrays false. Dit komt doordat het klonen van een eendimensionale array resulteert in een diepe kopie waarin de waarden worden gekopieerd naar een nieuwe array en niet alleen maar verwijzingen.
Veel Gestelde Vragen
V # 1) Hoe maak je een kopie van een array in Java?
Antwoord: Er zijn verschillende methoden om een array te kopiëren.
- U kunt een for-lus gebruiken en elementen van de ene naar de andere een voor een kopiëren.
- Gebruik de kloonmethode om een array te klonen.
- Gebruik de methode arraycopy () van de klasse System.
- Gebruik de methoden copyOf () of copyOfRange () van de klasse Arrays.
Vraag 2) Hoe wijs je de ene array aan de andere toe?
Antwoord: U kunt de array aan een andere toewijzen met behulp van een eenvoudige toewijzingsoperator (=). U moet ervoor zorgen dat de twee arrays van hetzelfde gegevenstype zijn en een identieke dimensie hebben.
V # 3) Wat is een ondiepe kopie en een diepe kopie?
Antwoord: Bij ondiepe kopie worden alleen de attributen van objecten of arrays in kwestie gekopieerd. Dus alle wijzigingen in de gekopieerde array worden weerspiegeld in het origineel. Java-klonen is een voorbeeld van een ondiepe kopie.
wat is de beste gratis advertentieblokkering voor Chrome
Een diepe kopie is degene waarin we een volledige kopie van het object nodig hebben, zodat wanneer we dat object klonen of kopiëren, het een onafhankelijke kopie is. Als het om primitieve of ingebouwde typen gaat, is er geen verschil tussen de ondiepe en diepe kopie.
V # 4) Wat doet een array-kloon?
Antwoord: De kloonmethode van arrays wordt gebruikt om de attributen van het ene object naar het andere te kopiëren. Het gebruikt hiervoor een ondiepe kopie.
V # 5) Kun je een array in een array opslaan?
Antwoord: Arrays kunnen arrays bevatten die zijn voorzien van de elementen die van hetzelfde type zijn (primitief of object). Dit betekent dat u geen integerarray in een stringarray kunt opslaan.
Gevolgtrekking
In deze zelfstudie hebben we de kopieerarrays en kloonarrays in Java onderzocht. We hebben verschillende methoden / benaderingen gezien om een array te kopiëren en te klonen.
Merk op dat de meeste van deze methoden een ondiepe kopie implementeren. Voor primitieve gegevenstypen verschillen ondiepe en diepe kopie niet. Maar wanneer een array objecten of verwijzingen bevat, moet de programmeur een diepe kopie implementeren volgens de vereisten.
In onze volgende tutorials blijven we meer ontdekken over Java-arrays.
Lees de Easy Java Training Series door.
Aanbevolen literatuur
- Zelfstudie over Java-array-lengte met codevoorbeelden
- Java Generic Array - Hoe generieke arrays in Java te simuleren?
- Java Array - Hoe elementen van een array in Java af te drukken?
- Multidimensionale arrays in Java (2D- en 3D-arrays in Java)
- Een array doorgeven / retourneren in Java
- Hoe een array in Java te sorteren - Tutorial met voorbeelden
- Java Array - Declareer, creëer en initialiseer een array in Java
- Een element verwijderen / verwijderen uit een array in Java