webForumDet fria alternativet

kopiera och dubbla en array

Java

7 svar · 477 visningar · startad av golgata

Medlem sedan maj 2000131 inlägg
Frågan#1

Jag har satt min Array till ett fast värde 5.
När det är fullt så vill jag skapa en ny dubbelt så stor Array och kopiera objekten från den gamla till den Nya.

Hur gör man detta?

Medlem sedan nov. 20022 355 inlägg
Medlem sedan maj 2000131 inlägg
#3

men jag lägger inte in mitt på samma sätt men jag har kanske gjort fel...
jag har gjort på följande sätt.

private int size;
private Media[] lista;
	
public MediaContainer(int i_size)
{
size = i_size;
lista = new Media[size];
}

Sen i den andra filen som heter testMedia.java har jag lagt in följande. 
[kod]
int size = 4;
MediaContainer lista = new MediaContainer(size);

Kan man ändra koden på något sätt så att det blir lättare att jobba med den...

Medlem sedan maj 2000131 inlägg
#4

Nu har jag ändrat ännu mer.

Min kod ser ut på följande sätt. Borde inte detta fuingera???

public class MediaContainer
{
	
	private Media[] lista;
	
	private int m_mediaArray;
	
	public MediaContainer()
	{
		
		lista = new Media[4];
		m_mediaArray = 0;
	}

public void okaArray()

{
	Media[] tmplista = new Media [10];
	for (int i =0; i<lista.length; i++)
	{ 
	tmplista[i] = lista[i];
	lista[i] = tmplista[i];
	}
	}
Medlem sedan feb. 2000372 inlägg
#5

Nej den fungerar inte som du vill. Metoden okaArray() kopierar element från lista till tmplista och sedan tillbaka till lista, detta gör inte att lista blir större. Referensen till tmplista kommer att försvinna efter att metoden returnerar. Det du behöver göra är att sätta lista att referera till tmplista efter for-loopen.

Medlem sedan maj 2000131 inlägg
#6

Men hur?

Som jag har gjort det plusar den väl bara till 1. jag vill dubbla arrayn....

Medlem sedan apr. 200357 inlägg
#7

Följande borde göra susen:

public void okaArray()
{
        // Dubbla array:en
	Media[] tmplista = new Media [lista.length * 2];

        //  Kopiera data till tmplistan
	for (int i =0; i<lista.length; i++)
	{ 
	    tmplista[i] = lista[i];	   
	}

         // Sätt om så att lista pekar på den nya array:en
         lista = tmplista;
}
Medlem sedan juni 20008 205 inlägg
#8

Använd inte en for-loop för att kopia delar av en array, använd System.arraycopy i stället. Den är snabbare.

258 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)