我有一个对象数组。对象中有一个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 ”时设置标记
答案 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:)