【问题标题】:Compare and retrieve elements from ArrayList从 ArrayList 比较和检索元素
【发布时间】:2013-11-11 10:55:46
【问题描述】:

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

【问题讨论】:

  • 如果你想创建字典,为什么不使用dictionary
  • 你可以用旧的方式循环(即使用整数计数器),然后调用 phrases.get(i+1)

标签: java arraylist get compare


【解决方案1】:

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】:

这样的东西对你有用吗?未经测试,仅来自我的头脑:

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

【讨论】:

  • indexOf 不会这样工作,因为它是一个短语列表,而不是字符串。
  • 此外,代码非常错误...c.get(c.indexof(c.indexof(nameSearch)+1) 行将尝试获取...索引的索引?此外,括号不匹配。删除第二个indexOf(。不过,indexOf 经常被不必要地调用,并且一开始就不起作用(参见前面的评论)。
【解决方案3】:

另一种方法是使用字典,例如 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),如果您的字典包含数千或数百万,这可能是相关的短语,或者如果您必须经常这样做。一个可能的缺点是条目必须真正相等,例如您无法(轻松)检查“相似”的短语或单词。

【讨论】:

    猜你喜欢
    • 2015-07-05
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 2012-08-06
    相关资源
    最近更新 更多