È consigliabile non modificare mai il contenuto di un Collection passato come parametro?
Voglio orgSet per avere solo parole. Ma, a volte ci sono un stringhe di carattere (come punti interrogativi, virgole, ecc.) Che voglio rimuovere dal set di parole. Questi non sono i metodi completi, ma questo è il mio punto:
public static Set<String> removeSyntax_Foo(Set<String> orgSet) {
Set<String> tmpSet = new HashSet();
for(String s : orgSet) {
if(s.length()!=1) { tmpSet.add(s); }
if(Character.UnicodeBlock.of(s.charAt(0)) == Character.UnicodeBlock.GENERAL_PUNCTUATION) { continue; }
tmpSet.add(s);
}
return tmpSet;
}
public static void removeSyntax_Bar(Set<String> orgSet) {
Set<String> tmpSet = new HashSet();
tmpSet.addAll(orgSet);
orgSet.clear();
for(String s : tmpSet) {
if(s.length()!=1) { orgSet.add(s); }
if(Character.UnicodeBlock.of(s.charAt(0)) == Character.UnicodeBlock.GENERAL_PUNCTUATION) { continue; }
orgSet.add(s);
}
}
removeSyntax_Foo() ha il potenziale per una perdita di memoria incurante. In realtà ho una lista di metodi statici che uso per ripulire il mio Set di parole. Se ognuno di questi metodi crea una nuova collezione ... Tuttavia, ritengo che questa sia la soluzione corretta da usare.
removeSyntax_Bar() mescola il contenuto della Set dell'invocatore che potrebbe essere una grande sorpresa per l'invocatore. Non dovresti farlo, giusto?
È removeSyntax_Foo() o removeSyntax_Bar() best practice?