增加循环中创建的对象的频率

时间:2015-06-27 14:56:57

标签: java frequency

我正在尝试使用通过解析文件生成的一些字符串来创建对象 每次字符串再次出现在文件中时,我需要增加对象的频率

for (int i = 0; i < chars.length - (k-1); i++) {                        
String s = "";
for(int j = i; j < i + k; j ++ ){
    s += chars[j];                  
}
if(!s.contains("N")){
    TreeObject obj = new TreeObject(s, 4);
    if(lines.contains(s)){
        obj.incrementFrequency();
        System.out.println("duplicate detected " + s + "\n");
    }
    else {
        lines.add(s);                                   
    }

其中lines是Set

Set<String> lines = new TreeSet<>();

我无法想到这样做的方法..由于数据可能很大,我认为使用数组不是一个好方法......

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

使用Map

Map<String, Integer> frequencies = new HashMap<>();

然后每次从解析中获得新的字符串s

frequencies.put(s, frequencies.getOrDefault(s, 0) + 1);

这将检查s中是否已存在键frequencies的条目,如果已​​存在,则将其值加1。否则,它只会将带有键s和值1的新条目放入frequencies

如果您无法访问Java 8,那么解决方案就不那么优雅了:

Integer previous = frequencies.get(s);
frequencies.put(s, previous == null ? 1 : previous + 1);