Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di jegger
    Registrato dal
    Mar 2005
    Messaggi
    74

    Che struttura dati usare

    Salve a tutti.

    Devo salvare in una struttura dati degli elementi composti formati da:

    Elemento1 - > [Stringa, Intero]
    Elemento2 - > [Stringa, Intero]
    ...
    ElementoN - > [Stringa, Intero]

    Dopodiché dovrei ordinare gli elementi in maniera crescente usando come discriminante il valore Intero.
    Che struttura dati mi conviene usare?

    Avevo pensato ad una hashtable usando come chiave la Stringa, ma mi serve anche sapere la posizione dell'elemento nella struttura dati. Avevo pensato anche ad un Vector bidimensionale di dimensione [N][2] ma non so se dopo è facilmente ordinabile una cosa del genere.

    Voi che mi consigliate?

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    in dettaglio, cosa rappresentano key e value (so che sono uno stringa e uno intero, ma puoi cambiarli a tuo piacimento)?
    mi spiego, sortedMap ti consente di ordinare, ma l'ordine è dettato dalle key e non da values, per cui se come chiave puoi usare il valore (o qualcosa che mantiene il valore) in formato stringa sei a cavallo.
    Se la struttura serve sia ordinata in determinati momenti, usi una normale hashmap e ordini all'occorrenza.
    Le mappe sono strutture già ottimizzate per quanto riguarda l'accesso, quindi ordinarle potrebbe essere una lavoro inutile.

    iniziare a gestire roba con i vettori doppi inizia a perdere in efficienza (almeno per me) di sviluppo e mantenimento

  3. #3
    Utente di HTML.it L'avatar di jegger
    Registrato dal
    Mar 2005
    Messaggi
    74
    Originariamente inviato da valia
    in dettaglio, cosa rappresentano key e value (so che sono uno stringa e uno intero, ma puoi cambiarli a tuo piacimento)?
    mi spiego, sortedMap ti consente di ordinare, ma l'ordine è dettato dalle key e non da values, per cui se come chiave puoi usare il valore (o qualcosa che mantiene il valore) in formato stringa sei a cavallo.
    Se la struttura serve sia ordinata in determinati momenti, usi una normale hashmap e ordini all'occorrenza.
    Le mappe sono strutture già ottimizzate per quanto riguarda l'accesso, quindi ordinarle potrebbe essere una lavoro inutile.

    iniziare a gestire roba con i vettori doppi inizia a perdere in efficienza (almeno per me) di sviluppo e mantenimento
    L'ordinamento deve essere fatto sugli interi.
    Il problema è che post ordinamento mi servirebbe sapere la posizione dell'elemento all'interno della struttura dati (se è 30-esimo o 65-esimo) per questo avevo accantonato l'hashtable.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    allora se tu hai come valore dell'hashmap

    ("54", 54);

    in cui chiave è il valore intero espresso come stringa, puoi sfruttare sortedMap.
    Ora per mantenere anche la posizione, o questa info la inserisci sulla chiave, o ti tieni in memoria a sto punto due strutture, in cui

    1. ("54", 54) è il valore
    2. ("54", posizione) è invece la posizione

    ma devi mantenere la consistenza di due strutture, il che non è banale (tieni conto di quanti accessi realmente fai).

    potresti anche fare una cosa, anzichè buttare come value un intero, puoi buttare un Object o addirittura una mappa
    map<Integer, Integer>, dove la chiave è la posizione e il valore è quello da te voluto

    quindi avresti

    Map<String, Map<Integer, Integer>>

    in cui string è ad esempio "54" (il valore e hai l'ordinamento).
    Integer (chiave) è la posizione
    Integer (valore ) è il tuo valore

    altra idea è

    Map<String, MyObject>

    dove myobject ha 2 interi come campi, valore e posizione (che devi gestire tu).

    altre idee non me ne vengono, sono un po' contraria agli array quindi se posso decidere la chiave della prima struttura, metterei un Integer(che è il value)

    ah non so se sono ammessi duplicati (sai che le mappe non li ammettono)

  5. #5
    Utente di HTML.it L'avatar di jegger
    Registrato dal
    Mar 2005
    Messaggi
    74
    Ti ringrazio per l'aiuto.

    Usare 2 strutture dati mi pare alquanto macchinoso. Io lascerei perdere a priori.

    Invece per quanto riguarda la struttura così composta: Map<String, Map<Integer, Integer>> so che c'è il problema dell'univocità (si dice così? ) delle chiavi.

    Per quanto riguarda la key della Map <String, Map<Integer, Integer>> , cioè la key di tipo String non ci sarebbero problemi di sorta dato che tutte le parole sono univoche.

    Per quanto riguarda la key della Map <Integer, Integer> devo capire se intendi costruire una Map di un singolo elemento per ogni record della Lista. In tal caso il problema univocità non si porrebbe dato che ci sarebbero tante piccole Map per ogni elemento.
    Se invece la Map secondaria è per tutti i record, si potrebbe fare usando come chiavi le sole posizioni dato che gli interi non sarebbero univoci sicuramente. Qui però nasce l'arcano: la Map individua le posizioni? A quanto ne so io no; cioè non mi ricordo esista un metodo che ritorna la posizione di un elemento.

    Dovrò usare un Vector[N][2]? Non mi pare molto elegante e non so se c'è il supporto per un ordinamento facile facile, ma forse dovrei farlo a manina io.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    io intendo

    Map<String, Map<Integer, Integer>>

    allora la stringa la decidi tu e non c'è problema di univocità (basta che ogni stringa sia diversa dalle altre)
    per quanto riguarda la seconda mappa,

    Map<Integer, Integer>

    hai coppia chiave valore, qui la chiave è la posizione, sicuramente univoca (e puoi ordinare per chiave), il valore è quello che tu devi inserire, non so se sono stata chiara adesso.

    quindi ogni record è composto da

    (chiaveStringa, (posizione, valore))

    chiaro adesso??

    qui hai

    http://download.oracle.com/javase/1..../util/Map.html

    di Map, puoi controllare per le altre, ma su questa struttura non è garantito che per un elemento ti dia l'indice.
    Puoi farlo con List, ma sono strutture dati differenti

  7. #7
    Utente di HTML.it L'avatar di jegger
    Registrato dal
    Mar 2005
    Messaggi
    74
    Eh infatti. Avevo controllato anch'io le api java ma non c'è possibilità di ricavare la posizione.

    L'alternativa è quindi usare un vector?

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    a questo punto penso ti sei risposto da solo, se il vector è ottimale per tutto quello che devi fare usa quello

  9. #9
    Utente di HTML.it L'avatar di jegger
    Registrato dal
    Mar 2005
    Messaggi
    74
    Grazie per la pazienza. Allora provo ad implementarlo con un Vettore bidimensionale.
    Se avrò difficoltà mi farò vivo.

    Grazie.

  10. #10
    Utente di HTML.it L'avatar di jegger
    Registrato dal
    Mar 2005
    Messaggi
    74
    Ho risolto usando un Vector multidimensionale di dimensione [N][2] dove la seconda dimensione contiene un oggetto composto da 2 campi (in e string). Ho implementato il metodo compareTo e poi ho usato il metodo Collections.sort(vettore) per ordinare gli elementi del vettore.

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.