Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di Wave
    Registrato dal
    May 2003
    Messaggi
    644

    HashSet e Random

    Ciao a tutti,,,

    ho un HashSet con dentro degli elementi....

    voglio selezionare e mettere in un Vector una data percentuale di questi elementi presi casualmente...

    Se l'insieme fosse stato un Vector e non un Hashset avrei saputo come fare (data l'indicizzazione degli elementi nel vector avrei creato un numero random compreso tra zero e le dimensioni del Vettore e avrei estratto quell'elemento) ma dato che l'HashSet non ha indici er gli elementi non so proprio come fare...

    qualcuno ha qualche idea??? se un elemento è stato selezionato e copiato nel Vector naturalmente non deve essere riselezionato, ma questo mi sembrava chiaro....

    grazie per l'aiuto. se non mi sono spiegato bene chiedete pure, vedrò di spiegarmi meglio...
    LINUX
    Powered by Ubuntu
    Powered by MacOS X


    ...vivi la tua vita come se ogni giorno fosse l'ultimo, poichè un giorno lo sarà...

  2. #2
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    metti le key in un vector, poi prendile a caso e recupera gli object dalla hash table...

    con questo codice crei il vettore contenente le key dell'hashtable

    codice:
        Hashtable ht = new Hashtable();
        ht.put("ABC", "abc");
        ht.put("XYZ", "xyz");
        ht.put("MNO", "mno");
    
        Vector v = new Vector(ht.keySet());
        Collections.sort(v);
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  3. #3
    Utente di HTML.it L'avatar di Wave
    Registrato dal
    May 2003
    Messaggi
    644
    Oddio....

    grazie della celere risposta ma non ho capito molto...è da poco che lavoro con gli insiemi in Java e non ho capito l'utilizzo della classe Hashtable e in particolare il tuo esempio....potresti spiegarmi meglio???
    LINUX
    Powered by Ubuntu
    Powered by MacOS X


    ...vivi la tua vita come se ogni giorno fosse l'ultimo, poichè un giorno lo sarà...

  4. #4
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    niente di che... hai la hashtable giusto ???

    con questa istruzione gli dici di crere un vettore con tutte le chiavi al suo interno...

    codice:
    Vector v = new Vector(ht.keySet());
    poi se vuoi te le riordini in modo da averle in ordine crescente

    codice:
    Collections.sort(v);
    cmq ora hai quello che chiedevi...
    hai un vettore su cui estrarre random...
    ti estrai random gli elementi del vettore...
    poi con gli elementi che hai estratto dal vettore ( le key ), ti prendi gli oggetti dalla hash...

    codice:
    ht.get(v.elementAt(tuoIndiceEstrattoACaso))
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  5. #5
    Utente di HTML.it L'avatar di Wave
    Registrato dal
    May 2003
    Messaggi
    644
    Ho capito che vuoi dire..il fatto è che io non ho usato un HashTable per raggruppare i miei elementi, ma un HashSet che non prevede l'utilizzo di key per identificare gli elementi all'interno dell'insieme....o almeno così mi è sembrato di capire...

    infatti per HashSet il metodo da te suggerito non esiste....

    mi consigli di utilizzare HasTable al posto di HashSet???non riesco a capire bene le differenze tra le due...

    o al max potrei lanciare il metodo toArray() sull'HashSet e lavorare con Random sull'array invece che sul Vector come avevo proposto prima...

    grazie per la risposta cmq.
    LINUX
    Powered by Ubuntu
    Powered by MacOS X


    ...vivi la tua vita come se ogni giorno fosse l'ultimo, poichè un giorno lo sarà...

  6. #6
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    boh... di primo impatto mi è venuto in mente di usare un hashtable...
    molto comodo come magazzino dove sbattere tutti i miei oggetti e recuperarli quando mi servono grazie alla chiave univoca...
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  7. #7
    Utente di HTML.it L'avatar di Wave
    Registrato dal
    May 2003
    Messaggi
    644
    Mi sono letto la documentazione di Hashtable, diciamo che non ho capito bene il suo funzionamento...

    Qualcuno mi potrebbe spiegare il suo funzionamento???
    LINUX
    Powered by Ubuntu
    Powered by MacOS X


    ...vivi la tua vita come se ogni giorno fosse l'ultimo, poichè un giorno lo sarà...

  8. #8
    Utente di HTML.it L'avatar di Wave
    Registrato dal
    May 2003
    Messaggi
    644
    allora...credo di aver capito qualche cosa...

    Ho una classe che come parametro ha un Hastable....

    il costruttore di questa classe quando lo lancio dovrebbe creare un Hastable vuoto...

    ho anche un maetodo .add (o .put ) che prende due parametri in evocazione: l'oggetto da inserire nell'Hashtable e la sua key....

    per creare la key passerei al metodo add (o put ) un oggetto random del tipo:

    Random.nextInt( n ); --> dove n è il numero degli elementi nell'Hashtable...

    quello che mi chiedo io...è possibile che in questo modo due elementi possano avere la stessa chiave???

    considerando il fatto che io una volta creato l'oggetto insieme, lo popolerò in sequenza grazie al metodo add (o put) prendendo i valori da inserire da un file....non vorrei che lanciando il metodo Random mi capitino dei valori uguali per le key...voglio che siano univoche...

    come posso fare???
    LINUX
    Powered by Ubuntu
    Powered by MacOS X


    ...vivi la tua vita come se ogni giorno fosse l'ultimo, poichè un giorno lo sarà...

  9. #9
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    ??? no... la hashtable non può avere 2 key uguali... se usa una key già presente sovrascrivi l'elemento...

    cmq non capisco cosa devi fare... all'inizio hai detto che gli elementi li avevi già e li mettevi in un hashset...
    cosa sono questi "elementi" ?? non c'è niente che li identifica e che puoi usare come chiave ???

    posta un po' di codice !!!!!
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  10. #10
    Utente di HTML.it L'avatar di Wave
    Registrato dal
    May 2003
    Messaggi
    644
    allora....

    Vediamo di chiarire un po di cose....io ho tutto il mio codice funzionante con i miei elementi dentro un HashSet... e potrei completare il mio programma utilizzando questo tipo di struttura dati...

    prima di parlare con te non mi era mai venuto in mente di utilizzare Hashtable...ma da quello che ho capito potrebbe fare al caso mio fal momento che ogni elemento dell'insieme in un Hashtable ha una propria chiave....

    quindi quello che volevo fare era vedere se modificando la mia classe in modo da utilizzare Hashtable più avanti con l'implementazione alcune cose sarebbero state più facili da implementare...

    Questo è la mia classe che vorrei convertire all'utilizzo di Hashtable:

    codice:
    package util;
    
    import java.util.*;
    
    public class ArchiAlternativi {
    	
    private HashSet insiemeA;
    	
    	public ArchiAlternativi(){
    		
    		HashSet A = new HashSet();
    		insiemeA = A;
    		
    	}
    	
    	public HashSet add(CoppiaAlternativa a){
    		
    		if (a.getClass() == CoppiaAlternativa.class){
    			insiemeA.add(a);
    		}
    		return insiemeA;
    		
    	}
    	
    	public HashSet remove(CoppiaAlternativa a){
    		
    		insiemeA.remove(a);
    		return insiemeA;
    		
    	}
    	
    	public Iterator getIterator(){
    		
    		return insiemeA.iterator();
    		
    	}
    	
    	public int size(){
    		
    		return insiemeA.size();
    		
    	}
    
    }
    il problema è, come dicevo nel post precedente, è che ogni elemento deve avere una propria key, il fatto è che non so come implementare una funzione che con sicurezza mi crei key diverse ogni volta che lancio il metodo .put ....
    Random crea numeri casuali, ma non necessariamente a lungo andare tutti diversi...
    LINUX
    Powered by Ubuntu
    Powered by MacOS X


    ...vivi la tua vita come se ogni giorno fosse l'ultimo, poichè un giorno lo sarà...

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.