搜索数组列表对的集合

时间:2013-11-17 20:45:05

标签: java if-statement collections arraylist iterator

我正在尝试搜索一对ArrayList的集合。我想要做的是,通过集合并找到一对中的第一个值并返回该对的第二个值。我遇到的问题是我必须找到第一个值的检查似乎不起作用,因此每次搜索时,我最终都返回null。我知道我的if语句存在问题,但我似乎无法弄清楚我做错了什么。由于这是一个家庭作业,我无法向我的对类或我的对列表类显示所有代码,但我可以向您展示我搜索第一个值的方法:

public S findFirst(F firstValue) {
    Iterator<Pair> myIter = this.iterator();
    S tmp2 = null;
    while (myIter.hasNext()) {
        Pair tmp1 = myIter.next();
        if (tmp1.getFirst() == firstCall) {
            tmp2 = (S) tmp1.getSecond();
        }
    }
    return tmp2;
}

如果我输入一个else语句,只是在我的if检查中调用我试图做的事情,如下所示:

else{
           tmp2 = (S) tmp1.getSecond(); 
        }

然后每当我测试第一个值时,我得到第二个值,所以我知道我至少在正确的路径上,但我假设我在if语句中检查的内容有问题。有谁知道我怎么能正确地做到这一点,(并且请记住这是家庭作业,所以如何解决这个问题的指南对我来说远比一些随机答案更有价值,我想学习,而不仅仅是给出答案)提前致谢!

4 个答案:

答案 0 :(得分:2)

不要使用==来比较对象。覆盖并使用equals()

答案 1 :(得分:2)

我认为

if (tmp1.getFirst() == firstCall)

应该说

if (tmp1.getFirst().equals(firstValue))

重要的区别是==检查两个表达式是否引用完全相同的对象。你更想知道你的两个表达式是否实际引用了相同的对象。

答案 2 :(得分:1)

试试这个:

if (tmp1.getFirst().equals(firstValue))

而不是

if (tmp1.getFirst() == firstCall)

您也可以覆盖自己的等于方法。

永远不要使用==来比较对象。

检查How to compare two java objects

答案 3 :(得分:0)

Matt说,(不要使用==)但我认为更大的问题是你没有返回'第一次'遭遇......你的if陈述应该看起来像:

public S findFirst(F firstValue) {
    Iterator<Pair> myIter = this.iterator();
    while (myIter.hasNext()) {
        Pair tmp1 = myIter.next();
        if (firstValue.equals(tmp1.getFirst())) {
            return (S) tmp1.getSecond();
        }
    }
    return null;
}