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
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
PriorityQueue è una coda "a priorità" in cui gli elementi sono mantenuti ordinati (in base al natural ordering o ad un Comparator esplicito).Originariamente inviato da YOGHI87
Salve, volevo sapere la differenza tra le 2 classi...
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.
comparator() non c'è in SynchronousQueue. Non esiste alcun criterio di ordinamento in SynchronousQueue.Originariamente inviato da YOGHI87
e se il metodo comparator() funziona in modo uguale su tutte e 2 le classi....
Questo metodo restituisce semplicemente il Comparator impostato o null.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
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
Non lo fai. SynchronousQueue non ha una struttura dati, non tiene N elementi, non ha "ordine"..Originariamente inviato da YOGHI87
se io volessi estrarre da una SynchronousQueue l'elemento più piccolo come posso fare??
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.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
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).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....
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.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
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
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).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??
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.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
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....
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