比较和检索ArrayList中的元素

我正在尝试构建一个简单的字典,将字符串与ArrayList上的单词进行比较,然后从列表中返回一个不同的值。 ArrayList用外来单词排列,然后是英语等价物,所以想法是我输入一个单词,使用scanner将它与数组列表进行比较,然后返回索引值+1,如果单词I类型在列表中排名第7,我希望它返回第8个单词并将其打印出来。

我已经有了输入字符串并进行比较的基本思路,但我不知道如何从ArrayList返回以下单词:

 public void translateWords(){ String nameSearch; nameSearch=input.nextLine(); for (Phrase c:phrases) { if (c.getName().equals(nameSearch)) { System.out.println( c.advancedToString()); return; } } System.out.println("not on list"); 

我已经尝试过使用ArrayList的get方法,但我不确定如何使用它,所以任何反馈都会非常感激。

for-each在这种情况下是不合适的,因为你不能访问连续的元素,在你的情况下翻译的单词。 所以我建议你使用Iterate

我猜phrases的类型是List

 public void translateWords(){ String nameSearch; nameSearch=input.nextLine(); Iterator it = phrases.iterator(); while(it.hasNext()) { Phrase c = it.next(); if (c.getName().equals(nameSearch)) { System.out.println( it.next().advancedToString()); return; } } System.out.println("not on list"); } 

这样的事情会为你做这个工作吗? 没有测试,只是从我的脑袋:

 public void translateWords(){ String nameSearch; nameSearch=input.nextLine(); if(c.indexof(nameSearch)){ System.out.println(c.get(c.indexof(c.indexof(nameSearch)+1)); } else { System.out.println("not on list"); } } 

另一种方法是使用字典,例如Java HashMap 。 在不知道如何实现Phrase类的情况下,这可能如下所示:

 // create dictionary Map d = new HashMap(); // add phrases d.put(new Phrase("Guten Tag", "de"), new Phrase("Good morning", "en")); // get translation Phrase p = d.get(new Phrase(nameSearch, "de")); 

(为了使这项工作,必须实现 Phrase.equalsPhrase.hashCode 。)

这似乎是您的任务数据结构的更好选择。 使用HashMap,项目的查找时间为O(1) ,而不是您方法中的O(n) ,如果您的词典包含数千或数百万个短语,或者您必须经常这样做,则可能是相关的。 一个可能的缺点是条目必须非常平等,例如你不能(轻松)检查“类似”的短语或单词。