我有一个对象的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);
}
}
答案 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()
(注意:列表必须排序)怎么样?