Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-优化在列表中查找字符串_Java_Optimization - Fatal编程技术网

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

Java-优化在列表中查找字符串,java,optimization,Java,Optimization,我有一个对象的ArrayList,其中每个对象都包含一个字符串“word”和一个日期。我需要查看500个单词的列表的日期是否已过。ArrayList最多可以包含一百万个单词和日期。我存储为整数的日期,所以我的问题是试图在ArrayList中找到我要查找的单词 有没有办法让这更快?在python中,我有一个dict和mWords['foo']是一个简单的查找,不需要遍历mWords数组中的全部100万项。java中有类似的东西吗 for (int i = 0; i < mWords

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

有没有办法让这更快?在python中,我有一个dict和mWords['foo']是一个简单的查找,不需要遍历mWords数组中的全部100万项。java中有类似的东西吗

    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);