Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    27

    Creare ed Istanziare un Array di Liste

    Buonasera a tutti, avrei un piccolo dubbio, parto dalle basi così spero di riuscire a farmi capire
    codice:
    int[] array=new int[10]
    questo codice mi crea un array di interi...crea l'oggetto ed istanzia le posizioni dell'array come int di valore 0....



    codice:
    LinkedList[] lista=new LinkedList[10]
    questo codice crea array di oggetti di tipo LinkedList, con tutte le posizioni null...potreste spiegarmi teoricamente perchè? e se c'è un modo tramite il costruttore di LinkedList di istanziare ogni singolo oggetto dell'array?

    l'unica soluzione trovata credo sia la più banale, creo l'array e ciclando le posizioni istanzio l'oggetto...
    cercavo però un modo un po meno invasivo per il metodo, o almeno volevo riuscire a capire come faceva questo codice
    codice:
    int[] array=new int[10]
    a creare ed istanziare...
    So anche che int non è un oggetto ma una variabile credo sia questo il motivo infatti se provo a creare
    codice:
    Int[] array=new Int[10]
    mi da lo stesso problema

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123

    Re: Creare ed Istanziare un Array di Liste

    Quanta confusione! Vediamo se riesco a fare chiarezza.

    Originariamente inviato da Blastor
    Buonasera a tutti, avrei un piccolo dubbio, parto dalle basi così spero di riuscire a farmi capire
    codice:
    int[] array=new int[10]
    questo codice mi crea un array di interi...crea l'oggetto ed istanzia le posizioni dell'array come int di valore 0....
    Ciò che stai facendo non è dichiarare un oggetto nel vero senso della parola. Stai semplicemente dicendo che la variabile array è di tipo intero ed è un array che può contenere 10 elementi. Gli elementi sono posti di default a 0, poichè si tratta di interi.


    codice:
    LinkedList[] lista=new LinkedList[10]
    questo codice crea array di oggetti di tipo LinkedList, con tutte le posizioni null...potreste spiegarmi teoricamente perchè? e se c'è un modo tramite il costruttore di LinkedList di istanziare ogni singolo oggetto dell'array?
    LinkedList è una tua classe? Spero di si.
    Anche qui, lo crea nulla perchè è il tipo di dato di default per gli oggetti. Quindi quello che stai facendo è allocare memoria per 10 elementi, ma non stai creando 10 oggetti! Infatti i riferimenti sono a null.

    Da come ne parli nella seconda domanda, ti stai riferendo all'API di Java. Quindi mi chiedo quand è l'ultima volta che hai guardato l'API di java...
    LinkedList è dichiarata in questo modo da Java 5 LinkedList<E>. Non capisco che utilizzo ne fai tu sinceramente. E' una delle classi del collection framework.
    I costruttori li trovi guardando l'API di Java: http://docs.oracle.com/javase/7/docs...nkedList%28%29


    l'unica soluzione trovata credo sia la più banale, creo l'array e ciclando le posizioni istanzio l'oggetto...
    cercavo però un modo un po meno invasivo per il metodo, o almeno volevo riuscire a capire come faceva questo codice
    codice:
    int[] array=new int[10]
    a creare ed istanziare...
    Bhe, non vi sono altri modi. Prima si specificano le dimensioni di un array, e poi lo si popola. Come ho detto prima quel codice non crea ed instanzia nulla; stai allocando memoria per un array (che è vero venga trattato come un oggetto) che può contenere i 10 elementi, ma tu i 10 elementi non li stai inserendo, 0 è solo il valore di default, come per gli oggetti è null.

    So anche che int non è un oggetto ma una variabile credo sia questo il motivo infatti se provo a creare
    codice:
    Int[] array=new Int[10]
    mi da lo stesso problema
    [/quote]

    Non ti seguo più... Int non esiste in Java. In java esistono int e Integer che è la classe wrapper per int.
    int è un tipo semplice, non è una variabile.


    Spiegata meglio ciò che vuoi sapere, perchè è tutto molto poco chiaro.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    a parte che probabilmente intendevi scrivere Integer invece di Int..

    come ti ha detto Patrick Jane quando costruisci un array con "new" allochi la memoria per l'array,
    non anche per i singoli elementi (come farebbe infatti il compilatore a sapere che argomenti passare al costruttore?)

    Detto ciò, esiste tuttavia la possibilità di allocare anche i singoli oggetti dell'array,
    utilizzando la dichiarazione+inizializzazione.

    Esempi:
    Integer[] array = { 0, 1 , 2, 3, 4 ,5};
    MiaClasse[] array = { new MiaClasse(123, 123), new MiaClasse(456, 456), new MiaClasse(789, 789) };

    Ciao.

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    27
    intanto grazie mille! so che l'argomento così trattato può fare confondere ancora di più...

    la mia domanda principale era solo perchè se fai un array di interi gli elementi di default sono a 0, mentre se fai un array di oggetti sono di default a null, volevo sapere esistesse un qualsiasi modo per passargli di default qualcosa!

    L'approcio che usa c0der lo conoscevo già, ma il mio intendo era sapere se c'era un modo per renderlo automatico o di default(come dice Patrick)

    P.S. LinkedList è una mia classe, è una lista semplice..

  5. #5
    Risposta breve No!
    Risposta lunga l'inizializzazione deglio oggetti in java (all'interno di un array) viene sempre fatta a null, mentre per i tipi primitivi int,long etc viene fatta a 0.
    Non c'è modo di dire a java che per il tuo programma l'inizializzazione di un oggetto deve avvenire differentamente.
    Ciao

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da Blastor
    intanto grazie mille! so che l'argomento così trattato può fare confondere ancora di più...

    la mia domanda principale era solo perchè se fai un array di interi gli elementi di default sono a 0, mentre se fai un array di oggetti sono di default a null, volevo sapere esistesse un qualsiasi modo per passargli di default qualcosa!

    L'approcio che usa c0der lo conoscevo già, ma il mio intendo era sapere se c'era un modo per renderlo automatico o di default(come dice Patrick)

    P.S. LinkedList è una mia classe, è una lista semplice..
    Ogni tipo di dato hai il suo valore di default, per i tipi primitivi numerici è 0, per gli oggetti è null.

    L'unico metodo "automatico" che esiste sono i metodi fill della classe Arrays, il problema è che con gli oggetti non è molto utile poiché tutti gli elementi dell'array si riferirebbero allo stesso oggetto, quindi se si tratta di oggetti probabilmente dovrai iterare l'array, se invece sono tipi primitivi l'apposito metodo fill risolverà i tuoi problemi.

    E comunque non è che iterarlo sia una cosa lunga, basta addirittura un for-each.

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    27
    grazie intanto per le risposte...credo di aver trovato comunque la risposta teoricamente più giusta, se creo un array di int, l'array allocherà ad ogni porzione di memoria 32byte per ogni intero, quindi quando creerà l'array saprà già quanta memoria dovrà allocare in memoria, se creo un array di oggetti l'array creerà solo dei puntatori di default a null, questo perchè non alloca fisicamente il dato in memoria ma quando lo istanzierò creerà il puntatore all'oggetto!
    Credo sia questa la base teorica del mio problema...
    Se dico cretinate sputatemi pure!XD

  8. #8
    A me sembra corretto, perché quando istanzi un array di oggetti quello che fai è assegnare una porzione di memoria, che conterrà, quando istanzi un oggetto, l'indirizzo di memoria di dove si trova realmente l'oggetto, cioè in termini tecnici il puntatore dell'oggetto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.