从对象数组中检查对象中存在的值的有效方法

时间:2012-08-12 15:44:04

标签: java dynamic

我有一个对象数组。对象中有一个getCountry()。我想在getCountry()等于'XXX'时设置一个标志。

据我所知,我正在做,

boolean isXXX=false;
if(custAcctArray != null)
{
    for(int index=0;index<custAcctArray.length;index++)
    {
        if(custAcctArray[i].getCountry().equalsIgnoreCase("XXX"))
        {
            isXXX=true;
        }
    }
}

if(isXXX)
{
    Do something about it....
}

当我假设数组中充满了100个或奇数个对象时,我不知道这个逻辑。有人可以通过其他方式抛出或放弃以有效方式实现最终输出吗? 我想要的内容 getCountry() ==“ XXX ”时设置标记

2 个答案:

答案 0 :(得分:3)

也许使用地图而不是数组。地图应该从国家映射到对象。然后,您将检查地图中是否存在密钥。

我的另一个想法是覆盖该类的toString()方法并使用Arrays.toString(custAcctArray).contains("XXX")(或者使用regexp进行更可靠的搜索)。但它看起来像一个解决方法。 (这个想法很糟糕。想想这是摆脱代码中循环的一种棘手的方法。)

编辑:总结一下我的想法。如果您知道值&#34; XXX&#34;而不是地图,我认为您应该使用布尔标志(请参阅我的评论)。初始化数组或使用一组并行的国家/地区值时。使用HashSet(效率O(1)),在这种情况下,您必须覆盖类中的equals()hashCode()方法。 TreeSet的效率较低(O(log(n))),在这里你可以使用比较器或在你的类中实现接口Comparable

编辑:但是,在这种情况下,我们有String个对象,因此无需实施任何内容(hashCode()equals()compareTo()已在此处实施。)

答案 1 :(得分:3)

boolean isXXX=false;
if(custAcctArray != null)
{
    for(int index=0;index<custAcctArray.length;index++)
    {
        if(custAcctArray[i].getCountry().equalsIgnoreCase("XXX"))
        {
            isXXX=true;
            break;//<-------------you need to exit to be quick and true solution!!!!
        }
}
}

if(isXXX)
{
Do something about it....
}
你看到了休息时间吗? ?这会尽快退出大循环。如果你不这样做,下一次迭代可以将它设置为其他值。

您还可以使用对象外部的“单独”数组来更快地访问它(减少1次边界检查)

更好的方法:在设置国家/地区值时,检查是否“xxx”然后立即设置isXXX而无需使用“check”algortihm:)