Java-优化在列表中查找字符串
我有一个对象的ArrayList,其中每个对象都包含一个字符串“word”和一个日期。我需要查看500个单词的列表的日期是否已过。ArrayList最多可以包含一百万个单词和日期。我存储为整数的日期,所以我的问题是试图在ArrayList中找到我要查找的单词 有没有办法让这更快?在python中,我有一个dict和mWords['foo']是一个简单的查找,不需要遍历mWords数组中的全部100万项。java中有类似的东西吗Java-优化在列表中查找字符串,java,optimization,Java,Optimization,我有一个对象的ArrayList,其中每个对象都包含一个字符串“word”和一个日期。我需要查看500个单词的列表的日期是否已过。ArrayList最多可以包含一百万个单词和日期。我存储为整数的日期,所以我的问题是试图在ArrayList中找到我要查找的单词 有没有办法让这更快?在python中,我有一个dict和mWords['foo']是一个简单的查找,不需要遍历mWords数组中的全部100万项。java中有类似的东西吗 for (int i = 0; i < mWords
for (int i = 0; i < mWords.size(); i++) {
if ( word == mWords.get(i).word ) {
return mWords.get(i);
}
}
for(int i=0;i
如果你没有被一个数组列表所困扰,你应该使用某种基于散列的数据结构。在本例中,它似乎非常适合(它非常接近python的dict
)。这将为您提供一个O(1)查找时间(与当前的线性搜索方法相比)。如果您没有被数组列表所困扰,您应该使用某种基于哈希的数据结构。在本例中,它似乎非常适合(它非常接近python的dict
)。这将给您一个O(1)查找时间(与当前的线性搜索方法相比)。您想在Java中使用
Map mWords=newhashmap();
mWords.put(“foo”,112345);
您想在Java中使用
Map mWords=newhashmap();
mWords.put(“foo”,112345);
如果您使用的是ArrayList
那么如何处理(注意:列表必须排序)如果您使用的是ArrayList
如果单词是唯一的,那么使用HashMap。我是说,{a',1},{b',2}
和words和dates.get(“a”)return 3
在这种情况下,您可以使用并在其中搜索如果单词是唯一的,则使用HashMap。我是说,{a',1},{b',2}
和words和dates.get(“a”)return 3
在这种情况下,您可以在其中使用和搜索谢谢各位!谢谢你的警告,因为它向我解释了HashMap是如何工作的。不客气。我很高兴你们今天学到了一些新东西谢谢大家!谢谢你的警告,因为它向我解释了HashMap是如何工作的。不客气。我很高兴你今天学到了新东西
Map<String,Integer> mWords = new HashMap<String, Integer>();
mWords.put ("foo", 112345);
Map<String, Integer> wordsAndDates = new HashMap<String, Integer>();
wordsAndDates.put("a", 1);
wordsAndDates.put("b", 2);
wordsAndDates.put("a", 1);
wordsAndDates.put("b", 2);
wordsAndDates.put("a", 3);