Ho un String[]
, originalStringArray
, che ha duplicati in loro. Quindi {"dog","cat","dog","fish","dog","cat"}
.Come restituire solo ArrayList di stringhe con il numero minimo di occorrenze?
Volevo creare una funzione che restituisca solo le stringhe che si verificano esattamente un certo numero di volte. Per qui, se ho detto 3, restituirebbe "cane" ma non "gatto".
Ecco il mio codice corrente:
public ArrayList<String> returnMultiples(String[] originalStringArray,int requiredCount){
ArrayList<Integer> mCount = new ArrayList<>();
List<String> list = Arrays.asList(originalStringArray);
ArrayList<String> result = new ArrayList<>();
// Count occurrences in original string
for(String item: originalStringArray){
mCount.add(Collections.frequency(list,item));
}
// If frequency is equal to count, add to array list
for(int i=0; i<mCount.size(); i++){
if(mCount.get(i) == requiredCount){
result.add(originalStringArray[i]);
}
}
return result;
}
Il problema che ho è, ho letto da qualche parte che la biblioteca Collezioni è molto lento e trascinare, e sembra anche che questo metodo potrebbe essere ridotto utilizzando HashSets e tabelle . Sfortunatamente, sono piuttosto incerto su come farlo. C'è un modo migliore per farlo?
Mostra una citazione. Le librerie di raccolte Java sono altamente ottimizzate. Le persone che dicono di essere lente di solito non le usano correttamente. Hai ragione. Vuoi una Map per risolvere questo problema. In particolare, se si desidera mantenere l'ordine di apparizione originale, utilizzare OrderedHashMap. –
Gene
Le prestazioni non sono importanti se si gestiscono piccole quantità di dati a mio parere. Quando elaborate migliaia o più elementi, le prestazioni iniziano a essere importanti e anche a quella quantità solo un po '. Detto questo non puoi usare un set perché ogni elemento dell'insieme deve essere unico. Inserirò ogni elemento e la sua occorrenza in una hashmap, durante il ciclo iniziale dell'array.Quindi dovrai scorrere l'hashmap e afferrare le chiavi che corrispondono ai criteri di occorrenza. –
'Multiset' dalla [libreria guava] (https://code.google.com/p/guava-libraries/wiki/NewCollectionTypesExplained) è qualcosa progettato esattamente per questo scopo. –