Java - 优化在列表中查找字符串

时间:2011-01-10 05:51:57

标签: java optimization

我有一个对象的ArrayList,其中每个对象包含一个字符串'word'和一个日期。我需要检查日期是否已经过了500个字的列表。 ArrayList最多可包含一百万个单词和日期。我存储的日期为整数,所以我遇到的问题是试图在ArrayList中找到我要查找的单词。

有没有办法让它更快?在python中我有一个字典和mWords ['foo']是一个简单的查找,没有循环遍历mWords数组中的整个100万个项目。在java中有这样的东西吗?

    for (int i = 0;  i < mWords.size();  i++) {
        if ( word == mWords.get(i).word ) {
           return mWords.get(i);
        }
    }  

4 个答案:

答案 0 :(得分:2)

如果单词是唯一的,那么使用HashMap。我的意思是,{“a”,1},{“b”,2}

Map<String, Integer> wordsAndDates = new HashMap<String, Integer>();
wordsAndDates.put("a", 1);
wordsAndDates.put("b", 2);

wordsAndDates.get("a") return 1

如果不是,则不应使用HashMap,因为它会覆盖以前的值。我的意思是

wordsAndDates.put("a", 1);
wordsAndDates.put("b", 2);
wordsAndDates.put("a", 3);

wordsAndDates.get("a") return 3

在这种情况下,您可以使用ArrayList并在其中搜索

答案 1 :(得分:1)

如果你没有使用ArrayList,你应该使用某种基于哈希的数据结构。在这种情况下,似乎HashMap应该很好地适合(它非常接近python的dict)。这将为您提供O(1)查找时间(与您当前的线性搜索方法相比)。

答案 2 :(得分:1)

您想在Java中使用Map

Map<String,Integer> mWords = new HashMap<String, Integer>();
mWords.put ("foo", 112345);

答案 3 :(得分:0)

如果您遇到ArrayList

Collections.binarySearch()(注意:列表必须排序)怎么样?