我有一些代码,我注意到迭代通过ArrayList的进度随着时间的推移变得非常慢。似乎导致问题的代码如下:
public boolean isWordOfficial(String word){
return this.wordList.get(this.stringWordList.indexOf(word)).isWordOfficial();
}
在访问这两个arraylists方面我不知道这段代码吗?
答案 0 :(得分:6)
我并不确切地知道您的development:
secret_key_base: 3b7cd727ee24e8444053437c36cc66c3
some_api_key: SOMEKEY
性能变得太慢,或者通过快速浏览一下您的用例,您正在执行以下操作:
ArrayList
,在word
中查找,并返回数字索引stringWordList
中的单词并将其返回这种使用模式最好由wordList
提供,其中键是输入Map
,可能对应于word
中的条目,输出是另一个单词,来自stringWordList
。
与wordList
列表中的查找相比,地图查找将是O(1)
操作。
答案 1 :(得分:0)
this.stringWordList.indexOf
是O(N),这是您的问题的原因。随着N增加(您在列表中添加单词),这些操作需要更长时间。
为避免这种情况,请将列表排序并使用binarySearch。
这使您的复杂性从O(n)到O(log(N))。