Toon posts:

[java] Vector clonen !?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met Vectoren, en nu wil ik een Vector clonen, maar waar moet je die in opvangen??

wat ik nu heb:
code:
1
2
Vector uid = new Vector();
uid = buddies.clone();

buddies is dus de originele vector die ik wil copieren naar uid

:?

  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Wat bedoel je met opvangen ?? :)

Verwijderd

Topicstarter
nou, als je een vector cloont, dan moet je die toch ergens in zetten?? anders kan je em net zo goed niet clonen :P

dus: wat voor type?
kan het met een vector zoals ik heb gedaan? en zo jah wat doe ik dan fout :?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

code:
1
2
3
Vector vOrigineel = new Vector();
....
Vector vClone = (Vector)vOrigineel.clone();

en je krijg alleen een shallow copy, niet een deep copy.

  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Clone is een methode die in java.lang.Object is gedefinieerd, en stuurt dus een Object terug. Eerst casten naar Vector dus :)

Verwijderd

Topicstarter
casten dus,

dat was het probleem !

thnx *D

  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Op maandag 17 december 2001 15:07 schreef Alarmnummer het volgende:
en je krijg alleen een shallow copy, niet een deep copy.
Wat is het verschil ?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Op maandag 17 december 2001 15:09 schreef MisterData het volgende:
Clone is een methode die in java.lang.Object is gedefinieerd, en stuurt dus een Object terug. Eerst casten naar Vector dus :)
als je clone() aan gaat roepen bij een eigen object moet je niet vergeten het object Clonable interface te laten implementeren anders krijg je:CloneNotSupportedException

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Op maandag 17 december 2001 15:10 schreef MisterData het volgende:

[..]

Wat is het verschil ?
Stel dat ik een vector heb met daarin het object persoonJan.
Als je een copie maakt van die vector dan word persoonJan ook in dat copie geplaatst. persoonJan die zit in 2 vectoren, dit is een shallow copy. Bij een deep copy zou ook persoonJan gecopieerd moeten worden.

  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

doorgaans schrijven we in nederland kopieren met een k :P

en kom, laten we clone methodes gaan implementeren en benchmarken :+

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

is goed... kom jij dan ook weer op 0 seconden uit? ;) :+

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
OiSyN: en kom, laten we clone methodes gaan implementeren en benchmarken :+
Hehe ;) .

Meestal schrijf ik clone methoden zelf om duidelijk verschil te houden tussen shallow en deep-klonen. De standaard clone oplossing vind ik niet echt prettig functioneren.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • roelio
  • Registratie: Februari 2001
  • Niet online

roelio

fruitig, en fris.

Op maandag 17 december 2001 15:19 schreef Alarmnummer het volgende:
Stel dat ik een vector heb met daarin het object persoonJan.
Als je een copie maakt van die vector dan word persoonJan ook in dat copie geplaatst. persoonJan die zit in 2 vectoren, dit is een shallow copy. Bij een deep copy zou ook persoonJan gecopieerd moeten worden.
bedoel je dat bij een clone = shallow copy er twee references naar persoonJan zijn en bij een deep copy zijn er twee aparte persoonJan's? Dat kan toch niet, twee instances met dezelfde naam?

AMD Phenom II X4 // 8 GB DDR2 // SAMSUNG 830 SSD // 840 EVO SSD // Daar is Sinterklaas alweer!!


  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Kan dus wel, alleen let op : het object heeft hier niet de naam "persoonJan" , maar staat in de tabel van de Vector :)

  • roelio
  • Registratie: Februari 2001
  • Niet online

roelio

fruitig, en fris.

Op maandag 17 december 2001 21:05 schreef MisterData het volgende:
Kan dus wel, alleen let op : het object heeft hier niet de naam "persoonJan" , maar staat in de tabel van de Vector :)
dit is deep copy? en shallow copy = references?
bij deep copy heeft ie dus geen naam behalve vector index zoveel?

AMD Phenom II X4 // 8 GB DDR2 // SAMSUNG 830 SSD // 840 EVO SSD // Daar is Sinterklaas alweer!!


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Shallow en deep heeft hiermee te maken:

java.lang.Object:
The method clone for class Object performs a specific cloning operation. First, if the class of this object does not implement the interface Cloneable, then a CloneNotSupportedException is thrown. Note that all arrays are considered to implement the interface Cloneable. Otherwise, this method creates a new instance of the class of this object and initializes all its fields with exactly the contents of the corresponding fields of this object, as if by assignment; the contents of the fields are not themselves cloned. Thus, this method performs a "shallow copy" of this object, not a "deep copy" operation.
java.util.ArrayList:
Returns a shallow copy of this ArrayList instance. (The elements themselves are not copied.)
Het heeft dus helemaal niets met namen of wat dan ook te maken, maar met de vraag hoe diep in de structuur er gecloned moet gaan worden...

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

limoentje: ik denk dat jij het concept 'variabelenaam' nog niet helemaal doorhebt :)

de naam is er alleen maar voor gebruikers om een bepaald geheugengebied aan te geven. Als jij doet
code:
1
Object henk = new Object ();

dan is er een variabele henk, die refereert naar het nieuwe object. Als je daarna doet
code:
1
Object piet = henk;

dan wijst piet naar hetzelfde object als henk naar toe wijst. De inhoud van henk en piet zijn hier dus hetzelfde, maar henk en piet zijn niet dezelfde variabelen

Geld natuurlijk ook voor arrays:
code:
1
2
Object[] array = new Object[10];
array[5] = piet;

Nu wijst array[5] ook naar het object waar piet en henk naar wijzen

Een object wordt pas verwijderd uit het geheugen nadat er geen enkele variabele meer is die naar dat object wijst


En om weer even ontopic te komen, als je een Vector clone'd, dan heb je dus 2 vectoren die allebei naar dezelfde objecten wijzen (een shallow copy dus)

Als je een deep copy nodig hebt zul je elk element in de ene vector ook nog eens moeten clonen, zodat elke vector zijn eigen kopie heeft

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
OiSyN legt het ff uit
Netjes uitgelegd :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • roelio
  • Registratie: Februari 2001
  • Niet online

roelio

fruitig, en fris.

oisyn misschien komt het door mijn brakke formulering van vragen maar variabelen/references zijn mij compleet duidelijk, in ieder geval voorzover jouw post gaat :)

en jouw uitleg is top, ik snap het nu helemaal :)

oh ja:
Afbeeldingslocatie: http://members.chello.nl/t.dewitte/mbravenboer.gif

AMD Phenom II X4 // 8 GB DDR2 // SAMSUNG 830 SSD // 840 EVO SSD // Daar is Sinterklaas alweer!!

Pagina: 1