Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    146

    PriorityQueue VS SynchronousQueue

    Salve, volevo sapere la differenza tra le 2 classi... e se il metodo comparator() funziona in modo uguale su tutte e 2 le classi....

    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: PriorityQueue VS SynchronousQueue

    Originariamente inviato da YOGHI87
    Salve, volevo sapere la differenza tra le 2 classi...
    PriorityQueue è una coda "a priorità" in cui gli elementi sono mantenuti ordinati (in base al natural ordering o ad un Comparator esplicito).

    Mentre SynchronousQueue è una coda "bloccante" che non ha una "capacità" (nel senso di struttura dati) perché chi inserisce e chi riceve si passano il dato "al volo". Per inserire bisogna che ci sia già qualcuno che ha invocato un remove, se così il passaggio è diretto.

    Originariamente inviato da YOGHI87
    e se il metodo comparator() funziona in modo uguale su tutte e 2 le classi....
    comparator() non c'è in SynchronousQueue. Non esiste alcun criterio di ordinamento in SynchronousQueue.
    Questo metodo restituisce semplicemente il Comparator impostato o null.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    146
    Io ho implementato una coda PriorityQueue con un metodo Comparator che mi ordina i valori dal più piccolo al più grande in modo tale da tirare fuori per primo l'elemento più piccolo, se io volessi estrarre da una SynchronousQueue l'elemento più piccolo come posso fare??

    Grazie

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da YOGHI87
    se io volessi estrarre da una SynchronousQueue l'elemento più piccolo come posso fare??
    Non lo fai. SynchronousQueue non ha una struttura dati, non tiene N elementi, non ha "ordine"..

    Un thread invoca poll() e sta lì bloccato in attesa, appena un altro thread invoca put/offer, allora l'altro riceve. E viceversa.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    146
    allora sai indicarmi una struttura dati in cui posso tirare fuori il valore minimo, però non deve essere ordinata cioè io ci devo calcolare un tempo di ricerca del valore.
    PriorityQueue mi andrebbe bene ma lei me li ordina....

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da YOGHI87
    allora sai indicarmi una struttura dati in cui posso tirare fuori il valore minimo, però non deve essere ordinata cioè io ci devo calcolare un tempo di ricerca del valore.
    PriorityQueue mi andrebbe bene ma lei me li ordina....
    Non ha senso. Una cosa è una collezione "sorted" (mantenuta ordinata in base al contenuto degli oggetti), un'altra è il concetto di "minimo" (o massimo).

    La classe di utility java.util.Collections ha vari metodi min/max che ricevono una generica Collection (ed eventualmente un Comparator) e trovano il minimo/massimo. Quindi come vedi non è questione di quale collezione .... ma di una operazione che si fa su un insieme di elementi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    146
    Ok, mi è stato chiesto di usare la classe vector o hashtable, con queste 2 classi è possibile fare una cosa come mi serve a me?? Come posso fare??
    Grazie

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da YOGHI87
    Ok, mi è stato chiesto di usare la classe vector o hashtable, con queste 2 classi è possibile fare una cosa come mi serve a me?? Come posso fare??
    Vector implementa Collection, quindi puoi ovviamente usarlo con min() di Collections. Hashtable no, poiché non implementa Collection ma bensì Map (le "map" sono collezioni a sé che formano una loro gerarchia distinta da tutte le altre Collection).
    Poi essendo una Map, pur volendo tralasciare un momento min(), dovresti comunque precisare: le map sono associazioni chiave->valore. Tu il "minimo" lo intenderesti riferito a cosa in una map??

    Comunque ripeto ancora per chiarezza: hai quindi un Vector che contiene oggetti che possono essere comparati perché sono loro stessi Comparable oppure lo sono tramite un apposito Comparator?? Bene, passi il Vector a Collections.min() (la versione con o senza Comparator) e ti fornisce l'oggetto "minimo". Punto, tutto qui.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    146
    Ti ringrazio per la tua chiarezza, in pratica il mio problema è il fatto che io devo implementare un hd che è diviso in settori e per l'appunto mi serve una struttura in chi inserire questi settori e ho una classe thread che simula la testina Dell hd e partendo dal punto zero mi si sposta nel settore più vicino richiesto da un processo anch'esso thread... Quindi io da questa struttura devo tirare fuori i valori richiesti (i settori) richiesti dal processo....

  10. #10
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Forse ho capito...

    1. la testina è un thread che ogni volta che va in un settore ci passa un po' di tempo.

    2. Poi c'è un altro thread che dice alla testina di spostarsi su certo settore.

    3. La testina riceve tutte le richieste e le mette in coda. Quando su un settore è finito il tempo, la testina prende dalla coda il successivo settore in cui spostarsi.

    4. Il criterio di estrazione dalla coda è quello di fornire il settore più vicino a quello in cui si trova già la testina.

    Mi pare che un Vector vada benissimo per inserire le richieste, quello che dovrai curare è solo la logica di estrazione dal vettore. Sarà un metodo che riceve come parametro il settore in cui si trova la testina e che fa una scansione del vettore per cercare il settore richiesto più vicino alla testina stessa. Poi rimuoverà dal vettore il settore scelto.
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

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.