2011-01-10 112 views
0

我有其中每个对象包含字符串“字”和日期对象的ArrayList查找字符串。我需要检查日期是否超过了500字的列表。 ArrayList可以包含多达一百万个单词和日期。日期我存储为整数,所以我的问题是,试图找到我要找的ArrayList中的字。爪哇 - 优化列表中

有没有办法让这个更快?在python我有一个字典和mWords [“富”]是不通过mWords阵列中的整个百万项循环简单的查找。在java中有这样的东西吗?

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

回答

3

如果单词独特然后使用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和它

+0

谢谢你们搜索!感谢这个警告,它向我解释了HashMap的工作原理。 – Mark 2011-01-10 06:52:53

1

如果你没有被卡住ArrayList你应该使用某种基于散列的数据结构。在这种情况下,似乎HashMap应该很好地匹配(它非常接近python的dict)。这会给你一个O(1)查找时间(相对于当前的线性搜索的方法)。

1

你想在Java中使用Map

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

`地图<字符串,整数>` – 2011-01-10 05:59:57