Trädvy Permalänk
Medlem
Plats
Örnsköldsvik
Registrerad
Jun 2008

Kan en ArrayList läka minne?

Hej!

Jag håller på samma upp data i listor och jag har ett problem. När jag håller på med listor så läker dem minne.

Jag sätter ett värde på position 2 i en ArrayList. Där efter när jag senare ska addera värde på samma position så är det något helt annat värde som kommer från föregående operation.

Jag är helt säker på att jag har gjort rätt för jag lägger mitt värde på position 2. Där efter kollar jag position 2 och då har jag ett mindre värde.

Kan en ArrayList läka minne?

Men jag kan misstänka att det har med indexering att göra. Hur fungerar indexering i java för arraylist?

| CPU: MMX 200 MHz Intel Pentium I| GPU: Voodo2 3dfx 8 Mb| RAM: SDRAM 32 Mb 133 Mhz | PSU: 3V fläkt 2W | Chassi: HP Vectra VE 5| Skärm: HP Ergo 1024| HDD: Toshiba 2033 MB | OS: Windows 95 B | Mus: HP |

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Aug 2010

Java använder sig av Garbage Collection (GC), vilket innebär att objekt som det inte längre finns en referens till inte nödvändigtvis tas bort ur minnet precis när den sista referensen tas bort.

Skrivet av heretic16:

Där efter när jag senare ska addera värde på samma position så är det något helt annat värde som kommer från föregående operation.

Lite kod som visar vad du gör skulle hjälpa, jag har svårt att tro att en ArrayList i Java spontant skulle byta ut värden på listelement.

Du får gärna citera eller nämna mig (@ToJa92) om du svarar på något jag skrivit.

Trädvy Permalänk
Medlem
Plats
Lund
Registrerad
Okt 2011
Skrivet av heretic16:

Hej!

Jag håller på samma upp data i listor och jag har ett problem. När jag håller på med listor så läker dem minne.

Jag sätter ett värde på position 2 i en ArrayList. Där efter när jag senare ska addera värde på samma position så är det något helt annat värde som kommer från föregående operation.

Jag är helt säker på att jag har gjort rätt för jag lägger mitt värde på position 2. Där efter kollar jag position 2 och då har jag ett mindre värde.

Kan en ArrayList läka minne?

Men jag kan misstänka att det har med indexering att göra. Hur fungerar indexering i java för arraylist?

Läcker minne låter det ju inte som det gör, utan snarare som att du antingen lagrar över det värde du lagt in på något vis eller att du gör något annat med det innan du läser det. Som föregående talare sa så är det lättare att räkna ut vad som går fel om man får se lite kod och veta lite mer om vad det är du försöker höra.

Corsair Vengeance LPX 2x8GB DDR4 2666MHz CL16 | Intel Core i7 6700 3,4 GHz 8MB | MSI Z170A KRAIT GAMING | Corsair Force Series 3 120 GB | Seagate SSHD Desktop 2 TB 7200 RPM 3,5" | Creative Sound Blaster Z PCIe | Western Digital 500 GB | Samsung Writemaster | Corsair TX750 V2 750 W | EVGA GeForce GTX 970 4GB SSC ACX 2.0+| Fractal Design Define R5 (Svart)

Trädvy Permalänk
Medlem
Plats
Örnsköldsvik
Registrerad
Jun 2008

@gaminggirl:

Hej!

Satt via telefonen. Nu ska jag posta lite kod.

Kan även tillägga lite mer.

Det jag gör är att läser en rätt så lång textsträng t.ex. " RÖR BÖJ ISO-2445 SSG 4544 3 ### DN 200" och det finns liknande textsträngar som säger nästan samma sak.

Här!
http://pastebin.com/yWFYHiWf

På rad 98 räknar den ut ett värde som är 2. Då ska den hämta ett värde som är 3.0. Men den hämtar ett annat värde. I detta fall är det värdet innan som lades till, på index 1. Trots att mellan rad 88 till 91 så visade den att index 2 har värdet 3.0.

| CPU: MMX 200 MHz Intel Pentium I| GPU: Voodo2 3dfx 8 Mb| RAM: SDRAM 32 Mb 133 Mhz | PSU: 3V fläkt 2W | Chassi: HP Vectra VE 5| Skärm: HP Ergo 1024| HDD: Toshiba 2033 MB | OS: Windows 95 B | Mus: HP |

Trädvy Permalänk
Medlem
Plats
Lund
Registrerad
Okt 2011
Skrivet av heretic16:

@gaminggirl:

Hej!

Satt via telefonen. Nu ska jag posta lite kod.

Kan även tillägga lite mer.

Det jag gör är att läser en rätt så lång textsträng t.ex. " RÖR BÖJ ISO-2445 SSG 4544 3 ### DN 200" och det finns liknande textsträngar som säger nästan samma sak.

Här!
http://pastebin.com/yWFYHiWf

På rad 98 räknar den ut ett värde som är 2. Då ska den hämta ett värde som är 3.0. Men den hämtar ett annat värde. I detta fall är det värdet innan som lades till, på index 1. Trots att mellan rad 88 till 91 så visade den att index 2 har värdet 3.0.

Borde det inte vara lättare att bara ha en ArrayList eller annan form av lista där du lägger in ett objekt av en egenskapad klass där allt du behöver veta finns med i stället för att ha 4 separata listor att hålla rätt på? Varför det inte fungerar har jag inte lyckats räkna ut, det borde gå att göra som du gör också...

Corsair Vengeance LPX 2x8GB DDR4 2666MHz CL16 | Intel Core i7 6700 3,4 GHz 8MB | MSI Z170A KRAIT GAMING | Corsair Force Series 3 120 GB | Seagate SSHD Desktop 2 TB 7200 RPM 3,5" | Creative Sound Blaster Z PCIe | Western Digital 500 GB | Samsung Writemaster | Corsair TX750 V2 750 W | EVGA GeForce GTX 970 4GB SSC ACX 2.0+| Fractal Design Define R5 (Svart)

Trädvy Permalänk
Medlem
Plats
Örnsköldsvik
Registrerad
Jun 2008
Skrivet av gaminggirl:

Borde det inte vara lättare att bara ha en ArrayList eller annan form av lista där du lägger in ett objekt av en egenskapad klass där allt du behöver veta finns med i stället för att ha 4 separata listor att hålla rätt på? Varför det inte fungerar har jag inte lyckats räkna ut, det borde gå att göra som du gör också...

Jadu! Jag kanske borde ha en klass istället som jag skriver till kanske?
Men just nu är det bara Antal arrayList som INTE fungerar. Så min metodik fungerar, men inte algoritmen.

| CPU: MMX 200 MHz Intel Pentium I| GPU: Voodo2 3dfx 8 Mb| RAM: SDRAM 32 Mb 133 Mhz | PSU: 3V fläkt 2W | Chassi: HP Vectra VE 5| Skärm: HP Ergo 1024| HDD: Toshiba 2033 MB | OS: Windows 95 B | Mus: HP |

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2007

På rad 109 så antar jag att du vill ändra på värdet som redan finns i listan, korrekt? Men add ändrar inte på ett element, det lägger till ett nytt på positionen som anges. Alla element som ligger efter i ArrayList:en kommer därmed att förskjutas ett steg, och indexen som du får från Beskrivning kommer då inte längre att stämma. För att ändra på värdet så bör du istället använda set.

Ett tips är också att lära dig att använda debuggern i vilken utvecklingsmiljö du än använder, så att du enkelt kan stega igenom programmet och se vad som händer.

Trädvy Permalänk
Medlem
Plats
Örnsköldsvik
Registrerad
Jun 2008
Skrivet av perost:

På rad 109 så antar jag att du vill ändra på värdet som redan finns i listan, korrekt? Men add ändrar inte på ett element, det lägger till ett nytt på positionen som anges. Alla element som ligger efter i ArrayList:en kommer därmed att förskjutas ett steg, och indexen som du får från Beskrivning kommer då inte längre att stämma. För att ändra på värdet så bör du istället använda set.

Ett tips är också att lära dig att använda debuggern i vilken utvecklingsmiljö du än använder, så att du enkelt kan stega igenom programmet och se vad som händer.

Hej. Jag märkte idag att jag skulle använda set (index, string) istället för add (index, string).

:):)

| CPU: MMX 200 MHz Intel Pentium I| GPU: Voodo2 3dfx 8 Mb| RAM: SDRAM 32 Mb 133 Mhz | PSU: 3V fläkt 2W | Chassi: HP Vectra VE 5| Skärm: HP Ergo 1024| HDD: Toshiba 2033 MB | OS: Windows 95 B | Mus: HP |