我有以下代码:
List<HashSet<String>> authorLists = new List<HashSet<String>>
// fill it
/** Remove duplicate authors */
private void removeDublicateAuthors(HashSet<String> newAuthors, int curLevel)
{
for (int i = curLevel - 1; i > 0; --i)
{
HashSet<String> authors = authorLists[i];
foreach (String item in newAuthors)
{
if (authors.Contains(item))
{
newCoauthors.Remove(item);
}
}
}
}
如何正确删除物品?我需要遍历 newAuthors 和 authorLists。由于这个原因,此处不能使用 RemoveWhere。
创建新列表、向其中添加项目然后删除重复项目非常低效。就我而言,authorLists 列表具有以下大小:
authorLists [0].size = 0;
authorLists [1].size = 322;
authorLists [2].size = 75000; // (even more than this value)
我需要调用 removeDublicateAuthors 1*(1) 322 (n) 75000 (m) 次,其中 n 和 m 分别是第一级和第二级重复作者的大小。我必须经常删除这些项目,并且数组的大小非常大。所以,这个算法效率很低。实际上,我在 Java 中有以下代码,并出于某些原因对其进行了重写:
/** 删除作者树中的重复作者*/
private void removeDublicateAuthors(HashSet<String> newCoauthors, int curLevel ) {
for(int i = curLevel - 1; i > 0; --i) {
HashSet<String> authors = coauthorLevels.get(i);
for (Iterator<String> iter = newCoauthors.iterator(); iter.hasNext();) {
iter.next();
if(authors.contains(iter)) {
iter.remove();
}
}
}
}
它的工作速度比目前建议的选项快得多