比较java中的List元素

Posted

技术标签:

【中文标题】比较java中的List元素【英文标题】:Comparing List elements in java 【发布时间】:2013-03-21 18:42:48 【问题描述】:

我有 2 个列表标记和和弦。他们人口充足。但是当我尝试比较 2 时,尽管在循环中单独打印时打印相同的字符串内容,它们总是会产生错误值。有什么想法/解决方法吗?

System.out.println(token.get(i).toString().equals(chords.get(j).toString()));

两者都声明为List并初始化为ArrayList();

两者都包含字符串对象。

while (i < tokenLength) 
    System.out.println("");
    int j = 0;
    while (j < numberOfChords) 
        System.out.println(token.get(i).toString() + " compares "
                + chords.get(j).toString());
        System.out.println(token.get(i).toString()
                .equals(chords.get(j).toString()));
        if (token.get(i).toString() == chords.get(j).toString()
                && token.get(i).toString().length() <= maxLengthOfChord) 

            foundChord.add(token.get(i));
        
        j++;
    
    i++;

给出以下输出:

我也试过了

System.out.println(token.get(i).toString().equals(chords.get(j).toString()));

它总是产生一个错误,返回与屏幕截图所示相同的结果

【问题讨论】:

请显示两个相同的字符串(不要忘记任何前导/尾随空格等)。 还修剪()你的字符串... 如果两者都是字符串,那么toString() 调用两者的意义何在。 小心你的实际 if 检查token.get(i).toString() == chords.get(j).toString(),这将比较实际的对象引用而不是值。 我建议打印字符串的长度,看看某处是否没有隐藏空间。 【参考方案1】:

到目前为止,您所做的一切都是正确的:

if (token.get(i).toString() == chords.get(j).toString()

你需要使用equals方法,而不是==

【讨论】:

【参考方案2】:

不能说为什么它打印错误,但这绝对是错误的:

    if (token.get(i).toString() == chords.get(j).toString()

将该行更改为

    if (token.get(i).trim().equals(chords.get(j).trim())

平等 (equals()) 与身份 (==) 不同。

【讨论】:

试过了。结果没有变化。 很好。检查你的分词器,或者任何给你输入的东西。【参考方案3】:

这将比较引用而不是值。

token.get(i).toString() == chords.get(j).toString()

你必须这样做:

token.get(i).toString().equals(chords.get(j).toString())

【讨论】:

【参考方案4】:

我不确定您当前的代码到底有什么问题,但我帮您简化了一点...

for (String t : token) 
  for (String c : chords) 
    System.out.println(t + " compares " + c);
    System.out.println(t.equals(c));
    if (t.equals(c)) 
      foundChord.add(t);
    
  

如果我理解正确,那么您应该按照您当前的代码试图实现的目标进行操作,并且它应该可以正常工作。

【讨论】:

【参考方案5】:

toString() 将默认打印对象的哈希码。这个哈希码对于所有对象都是唯一的,因此它永远不会与其他对象的哈希码匹配,并且比较它们时结果为假(即使对象相似)。您需要重写 toString() 方法以获得预期的结果。也许您可以从 toString 方法返回实例变量的值

【讨论】:

OP 表示列表包含字符串对象。 toString()String 对象将返回该对象的值。 equals 将使用字符串的值比较字符串,因此这段代码应该可以正常工作。 String 对象的 toString() 不返回哈希码。见docs.oracle.com/javase/1.5.0/docs/api/java/lang/… 是的,这是正确的,因为 String 类覆盖了默认的 toString() 实现,但通常大多数类不会,因此它们返回哈希码 但这不适用于这里。

以上是关于比较java中的List元素的主要内容,如果未能解决你的问题,请参考以下文章

java 怎么比较两个list是不是相同

java怎么比较两个list是不是相同?

JAVA中,如何去掉LIST里的重复元素

java 比较 两列表

Java高效找出两个大数据量List集合中的不同元素

Java List集合中元素比较大小