Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Quale Collection usare ?

    Salve a tutti,

    avrei la necessità di trovare una struttura dati che risponda alle seguenti esigenze.

    Dovrei memorizzare, per ogni elemento (chiamato Job) un insieme di stringhe (chiamate "tag"). Ogni job è referenziato univocamente da un proprio jobID, di tipo int.

    Dovrei memorizzare una struttura del tipo

    12345 --> tag1 tag2 tag3
    12357 --> tag2 tag3
    42342 --> tag1 tag2 tag6 tag7
    52411 --> tag2 tag5 tag5

    dove, sulla prima colonna, abbiamo gli integer.

    In particolare a partire da questa struttura le informazioni che dovrei successivamente estrarre sono:

    ricerca
    1. Dato un jobID, l'elenco dei tag ad esso associati (come List<String>)
    2. Dato un tag, i JobID in cui esso compare. (come List<Integer>)

    inserimento
    1. Dato un insieme di tag (come List<String>) aggiungere questi tag ad un certo job (magari evitando ridondanze)

    Quale struttura potrebbe agevolare l'implementazione di queste funzionalità ?

    Scusata la banalità della domanda, ma sono nuovo al linguaggio Java.

    Ciao e grazie,

    Alessandro

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

    Re: Quale Collection usare ?

    Originariamente inviato da xxxAlex83xxx
    Dovrei memorizzare, per ogni elemento (chiamato Job) un insieme di stringhe (chiamate "tag"). Ogni job è referenziato univocamente da un proprio jobID, di tipo int.

    Dovrei memorizzare una struttura del tipo

    12345 --> tag1 tag2 tag3
    12357 --> tag2 tag3
    42342 --> tag1 tag2 tag6 tag7
    52411 --> tag2 tag5 tag5

    dove, sulla prima colonna, abbiamo gli integer.

    In particolare a partire da questa struttura le informazioni che dovrei successivamente estrarre sono:

    ricerca
    1. Dato un jobID, l'elenco dei tag ad esso associati (come List<String>)
    2. Dato un tag, i JobID in cui esso compare. (come List<Integer>)

    inserimento
    1. Dato un insieme di tag (come List<String>) aggiungere questi tag ad un certo job (magari evitando ridondanze)

    Quale struttura potrebbe agevolare l'implementazione di queste funzionalità ?
    Senza sapere altre informazioni e requisiti, la prima cosa ovvia che mi viene in mente è:

    HashMap<Integer,List<String>>

    La chiave è un Integer (job ID), il valore è una List di String (realmente poi sarà ad esempio un ArrayList<String>).

    Originariamente inviato da xxxAlex83xxx
    2. Dato un tag, i JobID in cui esso compare. (come List<Integer>)
    Questo, con la collezione che ho appena detto non è facilmente fattibile. Nel senso che si dovrebbe fare una scansione di tutte le chiavi, per ogni chiave guardare il valore e vedere se tra la lista di stringhe c'è il tag e a quel punto aggiungere il job ID in un ArrayList<Integer>.

    In questi casi, se la ricerca deve essere veloce, meglio "affiancare" alla map principale un'altra map con la mappatura "al contrario". E la cosa migliore per fare ciò è realizzare una classe che "incapsula" tutta questa gestione (avrà metodi es. getJobIDsByTag(), getTagsByJobID() e altri del genere.
    Insomma ... nascondere tutta la gestione interna di questa doppia mappatura incrociata.
    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
    Aug 2002
    Messaggi
    8,013
    Quoto al 100% tutto quello che ti ha suggerito andbin, ma aggiungo anche la mia:

    Se hai svariate entry in questa struttura, la cosa migliore sarebbe utilizzare un database. Ti trovi a gestire relazioni 1 -> M (1 jobId a Molti tag). Te ne usciresti con 3 tabelle e una sola query sia nel caso tu voglia individuare quali tag sono associati ad un determinato jobId, sia per individuare tutti i jobId in cui un determinato tag compare.

    Fermo restando che tu possa usare un database (ne esistono anche su file, ragion per cui non dovresti installare niente).
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

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 © 2026 vBulletin Solutions, Inc. All rights reserved.