查找ArrayList中共享数据字段值的多个对象的索引值



我有一个存储汽车的ArrayList(例如(。汽车的每个实例都有三个数据字段(品牌、型号和年份(。Make和Model都是String,year是Int值。我希望能够搜索ArrayList,并返回2014年生产的每辆车的索引位置(比如(。我可以使用一个简单的搜索来返回第一个索引位置,如下所示:

public static int searchYear(ArrayList<Cars> cars, int key)
{
int size = cars.size();
for (int i = 0; i < size; i++)
{
if (cars.get(i).getYear() == key)      
return i;       
}
return - 1;
}

其中key==2014(我正在查找的年份(。我如何让它返回所有带有该键的汽车的索引值,而不仅仅是它的第一个实例?

简单回答:您应该返回一个值数组,而不是单个int。类似于此签名:

public static ArrayList<Integer> searchYear (ArrayList<Cars> cars, int key)

更多评论:

如果存在多个与该键匹配的实例,则将参数命名为key会产生误导。密钥不是唯一的密钥,而是一个值。。。我会改为调用参数year

你的方法的签名应该是这样的:

public static int[] searchYear (Cars[] cars, int year)

当然,您应该在您的方法中实现int数组的创建,并添加与您的年份参数匹配的索引。

你可能会问自己,为什么我把ArrayList<Cars>改成了Cars[]。好吧,这是你正在创建的这个方法未来使用的灵活性问题。普通数组[]是比ArrayList更常见的构造。事实上,我不会把ArrayList放在我的方法签名中,除非我使用任何特定于ArrayList的方法。

由于您使用.get(i(通过索引进行访问,因此此方法是在java.util.List接口上定义的,因此List参数是有意义的:

public static int[] searchYear (List<Cars> cars, int year)

我们可以讨论int[]返回类型:另一个选项是Collection<Integer>甚至Iterable<Integer>。选择一个或另一个的理由与cars参数相同:这完全取决于你想对方法返回的索引列表做什么。

最新更新