比较和检索ArrayList中的元素

时间:2013-11-11 10:55:46

标签: java arraylist get compare

我正在尝试构建一个简单的字典,将字符串与ArrayList上的单词进行比较,然后从列表中返回不同的值。 ArrayList用外来词排列,然后是英语等价物,所以我想输入一个单词,用扫描仪将它与数组列表进行比较,然后返回索引值+1,如果我输入的单词在列表中排名第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方法,但我不确定如何使用它,所以任何反馈都会非常感激。

3 个答案:

答案 0 :(得分:0)

这样的事情能帮到你吗?没有经过测试,只是从我的头上:

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

答案 1 :(得分:0)

在这种情况下,

for-each不合适,因为在您翻译的单词中,您无法访问连续的元素。 所以我建议你使用Iterate

我认为phrases的类型为List<Phrase>

public void translateWords(){
        String nameSearch;
        nameSearch=input.nextLine();

        Iterator<Phrase> 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");
}

答案 2 :(得分:0)

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

// create dictionary
Map<Phrase, Phrase> d = new HashMap<Phrase, Phrase>();
// 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必须为implemented。)

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