随着时间的推移,Java访问arraylist中的元素会变慢

时间:2016-06-22 05:22:48

标签: java android arraylist

我有一些代码,我注意到迭代通过ArrayList的进度随着时间的推移变得非常慢。似乎导致问题的代码如下:

public boolean isWordOfficial(String word){
    return this.wordList.get(this.stringWordList.indexOf(word)).isWordOfficial();
}

在访问这两个arraylists方面我不知道这段代码吗?

2 个答案:

答案 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))。