La situazione è la seguente:
Ho un array di stringhe, chiamato arrayPartenza con 18.000 elementi circa, così definito:
String[] arrayPartenza = new String [18000];
Ho un numero di altri elementi, circa 100.000 che posso mettere a mia scelta in un qualsiasi oggetto (quindi non necessariamente un array classico, ma anche un ArrayList, una Map, o qualsiasi altro), che possiamo chiamare arrayListaNera.
Devo creare un terzo oggetto, chiamato arrayDestinazione, così definito:
String[] arrayDestinaizone = new String [18000];
che contenga le sole stringhe di arrayPartenza, che non siano già contenute in arrayListaNera.
Naturalmente ciò può essere fatto in molti modi, e tutti piuttosto semplici. Ma il mio problema è trovare il modo più veloce (o uno dei modi più veloci) per farlo.
Non posso per ognuno dei 18.000 elementi di arrayPartenza, controllare se è presente in ognuno dei 100.000 elementi di arrayListaNera: ci impiegherei troppo tempo.
Ho in mente due possibili soluzioni:
1) definire arrayListaNera come un oggetto Hashset (oggetto che non può contenere elementi dupplicati). Così ognuno dei 18.000 elementi di arrayPartenza lo aggiungo ad arrayListaNera, e se la sua dimensione aumenta (significa che in arrayListaNera non ce ne era già uno uguale) , lo metto anche in arrayDestinazione
2) definire arraListaNera come HashMap (oggetto che accoppia ogni elemento a una chiave) in cui la chiave è la stringa, e come elemento un boolean, che vale sempre TRUE.
Così uso ciascuno dei 18.000 elementi di arrayPartenza come chiave di arrayListaNera per vedere se trovo il valore TRUE, e se non lo trovo, aggiungo tale stringa ad arrayDestinazione.
Voi avete altri suggerimenti?

Rispondi quotando

