繁体   English   中英

比较和检索ArrayList中的元素

[英]Compare and retrieve elements from ArrayList

我正在尝试构建一个简单的字典,该字典将字符串与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方法,但是我不确定如何使用它,因此在这里非常感谢任何反馈。

这样的事情对您有用吗? 未经测试,仅从我的头开始:

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

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

另一种方法是使用字典,例如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 。)

对于您的任务,这似乎是更好的数据结构选择。 使用HashMap时,项目的查找时间为O(1) ,而不是您的方法中的O(n) ,如果您的词典包含成千上万个短语,或者您必须经常执行此操作,则查找时间可能是相关的。 可能的不利条件是条目必须真正相等,例如,您不能(轻松地)检查“相似”的短语或单词。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM