gpt4 book ai didi

java - 优化:通过java中的集合进行双重循环

转载 作者:行者123 更新时间:2023-12-01 14:52:22 24 4
gpt4 key购买 nike

对于一组 5,600 个对象运行此代码需要 9 分钟:

public Set<UnDirectedPair<T>> getAllUndirectedPairs(Set<T> setObjects) {
Set<T> setObjectsProcessed = new TreeSet();
Set<UnDirectedPair<T>> setPairs;
setPairs = new TreeSet();
Iterator<T> setObjectsIteratorA = setObjects.iterator();
Iterator<T> setObjectsIteratorB;
T currTA;
T currTB;
while (setObjectsIteratorA.hasNext()) {
currTA = setObjectsIteratorA.next();
setObjectsProcessed.add(currTA);
setObjectsIteratorB = setObjects.iterator();
while (setObjectsIteratorB.hasNext()) {
currTB = setObjectsIteratorB.next();
if (!setObjectsProcessed.contains(currTB) && !currTA.equals(currTB)) {
setPairs.add(new UnDirectedPair(currTA, currTB));
}
}
setObjectsProcessed.add(currTA);
}
return setPairs;

}

正在寻找一种显着减少运行时间的方法...想法吗?

[背景]该集合包含人物。该集合中有重复项(同一个人,但由于输入时出现错误,属性略有不同)。我有一些方法需要两个人并进行必要的更正。因此,作为第一步,我需要创建一组(Person,Person)对,将其提供给这些方法。

最佳答案

我建议的一个技巧是维护外循环和内循环的计数器。

int outerCount=0;
while (setObjectsIteratorA.hasNext()) {
currTA = setObjectsIteratorA.next();
setObjectsProcessed.add(currTA);
setObjectsIteratorB = setObjects.iterator();
int innerCount=0;
while (setObjectsIteratorB.hasNext()) {
currTB = setObjectsIteratorB.next();
if (innerCount++>outerCount && !currTA.equals(currTB)) {
setPairs.add(new UnDirectedPair(currTA, currTB));
}
}
outerCount++;
setObjectsProcessed.add(currTA);
}
return setPairs;

这将保存最后一个包含,logN,操作。

背后的逻辑是:由于两个Iterator在同一个集合上,而ObjectProcessedSet的唯一目的是维护处理过的Object的记录,因此可以实现相同的比较索引。

示例

  Set1={1,1,2,4,5}
Iterator1 iteratorOuter=Set1.Iterator();


int outerCount=0;
while(iteratorOuter.hasNext()){
Iterator2 iteratorInner=Set1.Iterator();
int currA=iteratorOuter.next();
while(iteratorInner.hasNext()){
int CurrB=iteratorInner.next();
//Now here if CurraA=4 and CurrB=2 it is obvious it has been processed
//If currB =5 it is obviously has not been processed.
}
}

关于java - 优化:通过java中的集合进行双重循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14705714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com