Java 以类似于数据库表的格式计算频率的数据结构
我想知道是否有一种数据结构经过优化,可以根据存储在类似数据库表格式的数据计算频率。例如,数据以(逗号)分隔格式出现在下面Java 以类似于数据库表的格式计算频率的数据结构,java,data-structures,data-mining,Java,Data Structures,Data Mining,我想知道是否有一种数据结构经过优化,可以根据存储在类似数据库表格式的数据计算频率。例如,数据以(逗号)分隔格式出现在下面 col1, col2, col3 x, a, green x, b, blue ... y, c, green 现在我只想计算col1=x或col1=x和col2=green的频率。我一直在将数据存储在数据库表中,但在我的分析和经验观察中,数据库连接是瓶颈。我也尝试过使用内存中的数据库解决方案,效果很好;唯一的问题是内存需求和奇怪的init/destroy调用 另外,我主要
col1, col2, col3
x, a, green
x, b, blue
...
y, c, green
现在我只想计算col1=x或col1=x和col2=green的频率。我一直在将数据存储在数据库表中,但在我的分析和经验观察中,数据库连接是瓶颈。我也尝试过使用内存中的数据库解决方案,效果很好;唯一的问题是内存需求和奇怪的init/destroy调用
另外,我主要使用java,但有使用.net的经验,我想知道是否有api可以使用java以linq方式处理“表格”数据
非常感谢您的帮助。嵌套树形图怎么样?例如,假设您有以下记录:
col1=v, col2=v2
col1=v, col2=v3
您希望能够查询该结构并询问:“col1有多少次具有值v?”
我将使用以下代码向结构中插入值:
TreeMap tm = new TreeMap();
//the map hasn't seen this column name yet
if(!tm.containsKey(columnName)){
//mark the column value as being seen once
tm.put(columnName, (new TreeMap()).put(colVal, 1));
}else{
//the map has seen the column name.
TreeMap valueMap = tm.get(columnName);
if(valueMap.containsKey(colVal)){
//we've seen this column value before.
//Increment the number of times we've seen it
int valCount = valueMap.get(colVal);
valueMp.put(colVal, valCount++);
}else{
//we've have not seen this column value before.
valueMap.put(colVal, 1);
}
}
有一个数据结构可以为您跟踪频率。下面是使用该数据结构的示例代码(来自)
void frequencyccounter()
{
Multiset counter=HashMultiset.create();
添加(“col1”+“=”+“x”);
添加(“col2”+“=”+“x”);
添加(“col2”+“=”+“x”);
System.out.println(“col2有多少次值为x?”);
System.out.println(计数器计数(“col2”+“=”+“x”);
}
需要注意的要点
- 我正在连接列名 (col1)及其带(=)的值(x)为 添加到时的分隔符 多集
- 我正在重复同样的过程
检查频率a
给定列中的特定值
void frequencyCounter()
{
Multiset<String> counter = HashMultiset.create();
counter.add("col1" + "=" + "x");
counter.add("col2" + "=" + "x");
counter.add("col2" + "=" + "x");
System.out.println("how many times did col2 have the value x?");
System.out.println(counter.count("col2" + "=" + "x"));
}