Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [JAVA] Aiuto: Creare un insieme di oggetti

    [Sono nuovo perciò volevo congratularmi per lo splendido forum che è stato realizzato ]

    Salve a tutti,
    sto cercando di creare un insieme di oggetti(di una mia classe) e non so cosa utilizzare.
    Questo insieme conterrà l' ISTANZA (e quindi oggetti ben definiti) dei miei oggetti.
    Mi servirà, oltre le operazioni di base, quella di:
    - GetObj(obj) (restituisce il reference dell' oggetto cercato)

    Ho letto un po in giro e ho trovato l'interfaccia Set, le classi HashMap(in questo momento sembra la mia scelta) o HashSet.

    Ringrazio anticipatamente chiunque cerchi di aiutarmi

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Dipende da quello che serve a te.

    HashMap non implementa l'interfaccia Set, quindi se a te servono le caratteristiche di un insieme, questa classe non ti è di alcuna utilità (a meno di non effettuare a mano diversi controlli sulla fattibilità di un inserimento).

    HashSet è una implementazione base per un insieme in cui viene usato il valore dell'hashCode() degli oggetti per verificarne l'esistenza o meno nell'insieme e, di conseguenza, per permettere o meno l'inserimento di un oggetto. Non fornisce alcun meccanismo per il recupero diretto di un oggetto dall'insieme, ma solo un iteratore attraverto tutti gli elementi dell'insieme (iteratore che non garantisce alcun ordine di iterazione).

    TreeSet è un insieme ordinato di oggetti, che fornisce, in più rispetto a HashSet, un ordinamento degli elementi secondo il loro natural-ordering. Fornisce, a tal proposito, un iteratore che permette di scorrere gli oggetti in modo ordinato. Inoltre permette di ottenere dall'insieme il più piccolo elemento che sia maggiore o uguale ad un oggetto dato.

    Tutte queste cose sono ben documentate nelle relative documentazioni linkate.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Originariamente inviato da LeleFT
    Dipende da quello che serve a te.

    HashMap non implementa l'interfaccia Set, quindi se a te servono le caratteristiche di un insieme, questa classe non ti è di alcuna utilità (a meno di non effettuare a mano diversi controlli sulla fattibilità di un inserimento).

    HashSet è una implementazione base per un insieme in cui viene usato il valore dell'hashCode() degli oggetti per verificarne l'esistenza o meno nell'insieme e, di conseguenza, per permettere o meno l'inserimento di un oggetto. Non fornisce alcun meccanismo per il recupero diretto di un oggetto dall'insieme, ma solo un iteratore attraverto tutti gli elementi dell'insieme (iteratore che non garantisce alcun ordine di iterazione).

    TreeSet è un insieme ordinato di oggetti, che fornisce, in più rispetto a HashSet, un ordinamento degli elementi secondo il loro natural-ordering. Fornisce, a tal proposito, un iteratore che permette di scorrere gli oggetti in modo ordinato. Inoltre permette di ottenere dall'insieme il più piccolo elemento che sia maggiore o uguale ad un oggetto dato.

    Tutte queste cose sono ben documentate nelle relative documentazioni linkate.

    Ciao.
    Ciao,
    grazie per la risposta.

    Allora,
    sapevo che HashMap non è proprio un "insieme" ma era l'oggetto più vicino alle mie utilità.
    HashSet, come ho detto, avevo letto la sua documentazione e sapevo che mancava quella funzione di cui ho bisogno e che avrei dovuto sfruttare un iteratore ma volevo utilizzare metodi già scritti perché magari sono più efficienti dei miei.
    Inoltre non ho mai utilizzato hashCode() e francamente non saprei dove mettere mani
    Per quanto riguarda TreeSet sapevo anche di questo ma non è quello che cercavo quindi lo avevo bocciato in partenza.

    A questo punto che faccio, smanetto con HashSet?

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da Itachi1991
    Ciao,
    grazie per la risposta.

    Allora,
    sapevo che HashMap non è proprio un "insieme" ma era l'oggetto più vicino alle mie utilità.
    HashSet, come ho detto, avevo letto la sua documentazione e sapevo che mancava quella funzione di cui ho bisogno e che avrei dovuto sfruttare un iteratore ma volevo utilizzare metodi già scritti perché magari sono più efficienti dei miei.
    Inoltre non ho mai utilizzato hashCode() e francamente non saprei dove mettere mani
    Per quanto riguarda TreeSet sapevo anche di questo ma non è quello che cercavo quindi lo avevo bocciato in partenza.

    A questo punto che faccio, smanetto con HashSet?
    Da quello che dici sembrerebbe più adatto HashSet, e comunque non è che ci sia molto da temere in termini di efficienza: bisogna scorrere gli elementi, e che lo facciano le librerie o tu, sempre scorrerli bisogna. E non dovrebbe nemmeno esserci nulla di complicato.

  5. #5
    Originariamente inviato da Kaamos
    Da quello che dici sembrerebbe più adatto HashSet, e comunque non è che ci sia molto da temere in termini di efficienza: bisogna scorrere gli elementi, e che lo facciano le librerie o tu, sempre scorrerli bisogna. E non dovrebbe nemmeno esserci nulla di complicato.
    Ok allora vada per l HashSet.
    Sapete dirmi qualcosa riguardo l hashCode()?

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da Itachi1991
    Ok allora vada per l HashSet.
    Sapete dirmi qualcosa riguardo l hashCode()?
    Le funzioni di hashing non sono un argomento da liquidare in un post, online però dovresti trovare molto materiale ed eventualmente chiedere qui per dubbi più specifici.

  7. #7
    Ok io ho scritto una prima funzione di Hash, vi do un po di elementi per poter "giudicare".
    Credete sia sufficiente?

    Il mio oggetto è Item con dati membro:
    String name;
    String description;
    int weight;

    codice:
    public int hashCode()
    	{
    		int hash = 4;
    		if(this.name != null)
    		{
    			hash = 31 * hash + this.name.hashCode();
    		}
    		if(this.description != null)
    		{
    			hash = 31 * hash + this.description.hashCode();
    		}
    		hash = 31 * hash + this.weight;
    		
    		return(hash);
    	}

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.