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分かかります-これが正常かどうかはわかりません)。度数分布表を作成するより速い方法はありますか?