Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: HashMap con i generics

  1. #1

    HashMap con i generics

    Ciao a tutti,vi volevo porre un quesito...io sto facendo un progetto che deve simulare una Biblioteca,quindi avrò una classe Libro,Utente e la classe Biblioteca dove utilizzerò questi 2 oggetti....mi viene richiesto da progetto di contenere i Libri e gli utenti all'interno di due HashMap,come devo fare? o perlomeno qual'è la sintassi?
    Ho letto che bisogna usare un metodo hashcode(), perchè? O nn ho capito il funzionamento o mi sfugge qualcosa

    Ringrazio in anticipo tutti e spero mi riusciate a dire qualcosa...

    ciao e grazie

  2. #2

    continuo del quesito.....

    Vi metto i prototipi delle classi...forse ci capiamo meglio

    public class Libro extends Articolo implements Comparable <Libro> {
    public class Rivista extends Articolo implements Comparable <Rivista> {
    public class Articolo implements Comparable <Articolo> {
    public class Biblioteca {
    public class MyThread extends Thread implements Runnable {
    public class Programma {
    public class MyFrame extends JFrame {
    public class MyPanel extends JPanel implements ActionListener {


    Ho messo anche la classe MyThread poiche' dovro simulare da 1 a 30 utenti che prendono in prestito e inseriscono articoli; e le classi MyFrame e MyPanel poiche deve essere interfacciato con la grafica.

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

    Re: HashMap con i generics

    Originariamente inviato da the magician
    Ciao a tutti,vi volevo porre un quesito...io sto facendo un progetto che deve simulare una Biblioteca,quindi avrò una classe Libro,Utente e la classe Biblioteca dove utilizzerò questi 2 oggetti....mi viene richiesto da progetto di contenere i Libri e gli utenti all'interno di due HashMap,come devo fare? o perlomeno qual'è la sintassi?
    Ho letto che bisogna usare un metodo hashcode(), perchè? O nn ho capito il funzionamento o mi sfugge qualcosa
    hashCode() viene usato principalmente dalle collezioni che internamente sono basate su una "hash-table". Sono la maggior parte dei Set e dei Map. Ho detto la maggior parte perché ci sono delle eccezioni: ad esempio TreeMap/TreeSet, dove hashCode() non è usato ma solo perché si basano su un albero binario piuttosto che su una hash-table.

    Comunque in linea generale, se intendi usare oggetti di una tua classe come chiavi di una Map o come elementi di un Set, allora nella tua classe devi certamente implementare equals() e anche hashCode(). C'è un contratto ben preciso che lega hashCode() a equals(), quindi vanno implementati rispettando questo contratto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    ok,ma mi riuscirtesti a fare un esempio con le classi ke ho postato? Piu che altro mi è richiesto di ordinare gli articoli per titolo e gli utenti per cognome,come posso fare se le hashmap non sono ordinabili?

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da the magician
    ok,ma mi riuscirtesti a fare un esempio con le classi ke ho postato?
    Già nelle dichiarazioni che hai postato ci sono delle cose che non quadrano affatto.

    public class Libro extends Articolo implements Comparable <Libro> {
    public class Rivista extends Articolo implements Comparable <Rivista> {
    public class Articolo implements Comparable <Articolo> {

    Implementare Comparable<Articolo> in Articolo è ok. Ma poi nelle sottoclassi non puoi implementare Comparable di un altro tipo parametrico. La implementazione di Comparable è una sola. Una volta che una super classe ha "fissato" il Comparable con un certo tipo parametrico, quello rimane e non può essere cambiato. È un grosso limite .... lo so.

    Quindi devi togliere Comparable<Libro> e Comparable<Rivista>. Questo porta ad un'altra questione: se il Comparable è su Articolo, allora un oggetto Libro e un oggetto Rivista sarebbero comparabili tra di loro. È quello che vuoi veramente??


    public class MyThread extends Thread implements Runnable {

    "implements Runnable" è superfluo .... Thread già implementa Runnable.

    Originariamente inviato da the magician
    Piu che altro mi è richiesto di ordinare gli articoli per titolo e gli utenti per cognome,come posso fare se le hashmap non sono ordinabili?
    HashMap è una collezione unordered/unsorted, quindi non c'è alcun ordinamento né all'interno della collezione, né per quanto riguarda l'ordine di iterazione delle chiavi.

    Se vuoi che la map sia mantenuta ordinata internamente in base al contenuto delle chiavi, allora usa TreeMap che è una collezione "sorted".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Hai ragione non avevo ancora letto bene i Generics,comunque sono obbligato ad utilizzare l'HashMap obbligatoriamente in quanto,lei c'è l'ha venduta così,possiamo avere articoli 'multipli'. Quindi,visto questo obbligo,come faccio a creare una vista delle mappe?


  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da the magician
    possiamo avere articoli 'multipli'. Quindi,visto questo obbligo,come faccio a creare una vista delle mappe?
    Che intendi per articoli multipli??? All'inizio hai detto: "di contenere i Libri e gli utenti all'interno di due HashMap". Ma devi specificare meglio cosa sono le tue chiavi e i tuoi valori nella map.

    Non so, per farti un esempio, una possibilità è fare la associazione titolo--->Libro. Insomma, devi specificare meglio quale vuoi che sia la tua chiave di ricerca nella map e quale è il valore associato ad una chiave.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Visto che non mi riesco a far capire ti scrivo le direttive.
    "La memorizzazione degli archivi di Articoli ed Utenti deve essere fatta usando le mappe implementate a tabella hash.....L'ordine naturale degli Articoli deve guardare solo il numero di inventario,mentre l'ordine naturale degli Utenti deve guardare solo il cognome;entrambi devono essere consistenti con equals().........Deve inoltre essere possibile clonare un Libro o una Rivista per inserirne in Biblioteca una ulteriore copia che abbia stesso stato ma diversa identita'revedere Interfaccia Clonable e metodo clone(),quando opportuno,nei diversi livelli di gerarchia".
    Questo e' quello che mi viene richiesto dal progetto spero di esser stato piu' chiaro di prima

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da the magician
    La memorizzazione degli archivi di Articoli ed Utenti deve essere fatta usando le mappe implementate a tabella hash.....
    Ormai si è capito che devi usare delle map ma la questione è capire cosa deve essere la chiave e cosa il valore. Posso supporre che per la mappa degli articoli il valore sia un Articolo e per la mappa degli utenti il valore sia un Utente. Ma ... le chiavi cosa sono??? O è diversamente?

    Ripeto ancora una volta che questo è da specificare bene e non l'hai ancora fatto. Ti è chiaro che nelle map ci sono delle associazioni tra una chiave (univoca, non può essere duplicata) e un valore?

    Originariamente inviato da the magician
    L'ordine naturale degli Articoli deve guardare solo il numero di inventario
    Vuol dire che il Comparable per Articolo userà solo il numero di inventario per la comparazione.

    Originariamente inviato da the magician
    mentre l'ordine naturale degli Utenti deve guardare solo il cognome
    Anche qui il Comparable per Utente userà solo il cognome per la comparazione.

    Originariamente inviato da the magician
    entrambi devono essere consistenti con equals()
    Quindi per equals() dovrai fare il confronto con lo stesso campo come detto sopra.

    Originariamente inviato da the magician
    Deve inoltre essere possibile clonare un Libro o una Rivista per inserirne in Biblioteca una ulteriore copia che abbia stesso stato ma diversa identita'revedere Interfaccia Clonable e metodo clone(),quando opportuno,nei diversi livelli di gerarchia
    Va bene. Quando dice "nei diversi livelli di gerarchia" immagino che intenda il fatto di clonare gli eventuali oggetti contenuti nell'oggetto principale che stai clonando. Se nel tuo oggetto sono referenziati oggetti immutabili (es. String), non ci sarebbe davvero bisogno di clonarli. String ad esempio non è clonabile nel senso di clone() ma se vuoi puoi creare un nuovo oggetto String che ha lo stesso contenuto di un'altro String. Anche se la cosa non servirebbe molto ...

    Originariamente inviato da the magician
    Questo e' quello che mi viene richiesto dal progetto spero di esser stato piu' chiaro di prima
    Più o meno, rimane la questione delle map.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    io ti dico quello che (penso)di aver capito.....Mappa Articolo con chiave numero di inventario e valore l'oggetto Articolo e per quanto riguarda Utente chiave il cognome e come valore l'oggetto.....visto che mi sembra una stronzata questo ragionamento in quanto(sempre secondo me) non ci può essere chiave un cognome che non è un valore univoco chiedo a voi che siete esperti della materia....Mi servirebbe un esempio con le mie classi di due hashmap (articolo e utente) e un esempio di vista delle due mappe visto che sono unsorted....Scusate ancora la rottura

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.