【问题标题】:arraylist.contains(string) not evaluating stringarraylist.contains(string) 不评估字符串
【发布时间】:2013-03-24 00:23:04
【问题描述】:

奇怪的是,我有一种使用 ArrayList.contains(Object o) 的感觉在这里遗漏了一些东西,但它现在没有出现在我身上,有人能指出我正确的方向吗?

我有两个包含值列表的 ArrayList。我想比较它们并获取文件中匹配项的数量,所以我这样做了:

ArrayList<String> policyNumbersBene = new ArrayList<String>();
policyNumbersBene.add("YOOHOO");
ArrayList<String> policyNumberDly = new ArrayList<String>();
policyNumberDly.add("YOOHOO");

int count = 0;
for (String policyNumber : policyNumbersBene) { // compare 2 arraylists to each other.
    count += (policyNumberDly.contains(policyNumber) ? count : 0;
}
'SYSO'(count);

我相信我应该在计数器的输出中得到 1,但我每次都得到 0。当我在那里打开一个调试器时,我可以看到数组中的值列表,并且在那里看到“YOOHOO”。有人可以指出我做错了什么吗?我感觉像一个完整的 java 新手问这个问题。

【问题讨论】:

  • 第一次迭代,count += count => 0;
  • 天啊,我真是个白痴...伙计,为你+1...我不敢相信我完全错过了... :: 掌心 ::
  • if (policyNumberDly.equals(policyNumber)) 怎么可能返回 true,因为它们不是同一类的实例(ArrayList&lt;String&gt; 与 String)?
  • @sp00m,你说得对,我编辑了帖子并删除了评价,因为它永远不会返回 true。

标签: java string arraylist contains evaluate


【解决方案1】:

当你执行这一行时,count 是0 所以你得到0 + 0

count += (policyNumberDly.contains(policyNumber)) ? count : 0;

修复:

count += (policyNumberDly.contains(policyNumber)) ? 1 : 0;

【讨论】:

  • 我不敢相信我错过了这个......看起来我在周末的某个地方抛出了一个 id10t 异常并且从未恢复过。
  • 乔希,我们都去过那里。
【解决方案2】:

如果您需要调用包含的方法,我建议使用LinkedHashset 而不是ArrayList。

调用将在恒定时间内进行,而不是 O(n)。

【讨论】:

  • 我实际上尝试了这个解决方案,它的运行速度比比较 ArrayLists 快得多(12 秒)。感谢您的提醒!
【解决方案3】:
   System.out.println(policyNumberDly.contains(policyNumber) ? 1 :0);

它打印 1 所以 state count=1;

【讨论】:

    猜你喜欢
    • 2015-02-13
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多