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

Java访问arraylist中的元素会随着时间的推移而变慢,java,android,arraylist,Java,Android,Arraylist,我有一些代码,我注意到遍历ArrayList的过程随着时间的推移变得非常缓慢。导致问题的代码如下所示: public boolean isWordOfficial(String word){ return this.wordList.get(this.stringWordList.indexOf(word)).isWordOfficial(); } 关于这段代码,在访问两个ArrayList方面是否有什么我不知道的地方?我不知道确切的原因,也不知道您的ArrayList性能变得太慢了,

我有一些代码,我注意到遍历ArrayList的过程随着时间的推移变得非常缓慢。导致问题的代码如下所示:

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

关于这段代码,在访问两个ArrayList方面是否有什么我不知道的地方?

我不知道确切的原因,也不知道您的
ArrayList
性能变得太慢了,但是从您的用例来看,您正在执行以下操作:

  • 给定一个字符串
    word
    ,在
    stringWordList
    中查找它,并返回数字索引
  • 在该索引中包含的
    wordList
    中查找单词并返回它
这种使用模式最好使用
映射
,其中键是输入的
单词
,可能对应于
stringWordList
中的一个条目,而输出的另一个单词则来自
wordList


地图查找将是一个
O(1)
操作,与列表中查找的
O(N)
相比。

我不知道您的
ArrayList
性能变得太慢的确切原因或程度,但是快速浏览一下您的用例,您正在执行以下操作:

  • 给定一个字符串
    word
    ,在
    stringWordList
    中查找它,并返回数字索引
  • 在该索引中包含的
    wordList
    中查找单词并返回它
这种使用模式最好使用
映射
,其中键是输入的
单词
,可能对应于
stringWordList
中的一个条目,而输出的另一个单词则来自
wordList


映射查找将是一个
O(1)
操作,而在列表中查找则是
O(N)

this.stringWordList.indexOf
是O(N),这就是问题的原因。随着N的增加(将单词添加到列表中),这些操作所需的时间越来越长

为了避免这种情况,请对列表进行排序并使用


这将使您的复杂性从O(n)增加到O(log(n))。

此.stringWordList.indexOf
为O(n),这就是问题的原因。随着N的增加(将单词添加到列表中),这些操作所需的时间越来越长

为了避免这种情况,请对列表进行排序并使用


这将使您的复杂性从O(n)增加到O(log(n))。

随着时间的推移,您的意思是什么?另外,为什么要使用两个ArrayList?请提供完整的代码。随着时间的推移,您的意思是什么?另外,为什么要使用两个ArrayList呢?请提供完整的代码。感谢您的快速回答,我们将研究如何实现它。根据我的需要,我可能会拥有这两个ArrayList,但也会为该特定函数创建一个映射。我有一个安装加载屏幕/警报,所以我可以在那里进行。我本来会给你如何构建地图的代码,但是你提供的代码片段不够完整,我提供的任何内容都没有意义。没关系,我知道如何构建地图。非常感谢这个答案,速度实际上比我以前的方法有了很大提高(我发布的前一个)。我想看看我是否能实现一个地图,以加快搜索其他场景的速度。很高兴我能帮助你。谢谢你的快速回答,我会考虑实现它。根据我的需要,我可能会有这两个ArrayList,但也会为特定功能创建一个地图。我有一个设置加载屏幕/警报,所以我可以就在那里做吧。我会给你如何构建地图的代码,但是你给出的代码片段不够完整,我给出的任何东西都没有意义。那很好,我知道如何构建地图。非常感谢这个答案,速度实际上比我的旧方法(在我发布之前的方法)有了很大提高.我想看看我是否能实现一个地图来加速搜索其他场景。很高兴我能帮你。