我尝试在 Java中实现隐身 k 匿名化算法。该算法的一部分是给定表的频率集构造。表的列每次都不同,所以我决定将表表示为 Object[] 的 ArrayList,其中 Object[] 大小是列数。在这个对象中,我为每一列存储每一行的值。
我尝试使用以下方法构建频率表:
ArrayList<Object[]> table = new ArrayList<Object[]>();
....// table filling//.....
ArrayList<Object[]> frequencySet = new ArrayList<Object[]>();
for(int i=0;i<table.size();i++)
{
Integer count = 1;
int j = 0;
for(j=i+1;j<table.size();j++)
{
if(Arrays.equals(table.get(i), table.get(j)))
{
//System.out.println(i+" equals to "+j);
count++;
table.remove(j);
j = j-1;
}
}
int size = arguments.size()+1;
Object[] anObject = new Object[size];
System.arraycopy(table.get(i), 0, anObject, 0, arguments.size());
anObject[size-1] = count;
frequencySet.add(anObject);
}
问题是算法很慢,我发现大部分时间都花在了这种方法上。(对于 100.000 个数据,它需要 13 分钟才能运行 - 我不知道这是否正常)。有没有更快的方法来构建频率表?