我实际上有几个问题。
我有一个包含以下实例字段的 Dog 类:
private int id;
private int id_mother;
private int id_father;
private String name="";
private String owner="";
private String bDate="";
我也有一个 Archive 类,可以实例化 Dog 并将Dog对象放入ArrayList中。
我正在尝试在 Archive中 编写一个方法,该方法将整数作为ID,并通过ArrayList查找,并返回包含该ID的对象。
private Dog getDog(int id){
Dog dog = new Dog();
int length=getSize();
int i=0;
dog=al.get(i);
i++;
while(dog.getId()!=id && i<length)
dog=al.get(i);
i++;
if(dog.getId()!=id)
dog=null;
return dog;
}//end getDog
这种方法有两个问题(我使用的其他方法是有效的)。首先,它不起作用,我不明白为什么。我正在(可能)循环遍历arraylist中的所有对象,因为然后在循环结束后,检查循环是否完成是因为循环用完了要搜索的对象,还是因为找到了具有给定ID的对象。其次,这似乎是一个非常耗时的过程。有什么办法可以加快速度吗?
A while
适用于后面的表达式或块while
。
您没有障碍,所以您的while以表达式结尾 dog=al.get(i);
while(dog.getId()!=id && i<length)
dog=al.get(i);
此后的一切仅发生一次。
没有理由要换一只狗,因为您永远不会使用自己换来的狗。您立即将阵列中的Dog分配给您的Dog引用。
而且,如果您需要获取键的值,则应使用Map而不是Array。
编辑:这是为什么?
OP的评论:
关于不必重新制作Dog的另一个问题。如果我只是从数组列表中取出对象的副本,那么又如何在没有放置对象的情况下将其从数组列表中取出呢?我也注意到我没有把while循环括起来。
Java引用和它引用的对象是不同的东西。它们非常像C 引用和对象,尽管Java引用可以像C 指针一样重新指向。
最终的结果是,Dog dog;
或者Dog dog = null
给您提供了指向任何对象的参考。new Dog()
创建 一个可以指向的对象。
在此之后,dog = al.get(i)
意味着引用现在指向由返回的狗引用al.get(i)
。请理解,在Java中,从不返回对象,而仅返回对对象的引用(这是对象在内存中的地址)。
现在,您新建立的Dog的指针/引用/地址已丢失,因为没有代码引用它,因为该引用对象已替换为您从那里获得的引用对象al.get()
。最终,Java垃圾收集器将销毁该对象。在C
++中,您将“泄漏”内存。
结果是您确实需要创建一个可以引用Dog的变量。您无需使用来创建Dog new
。
(实际上,您不需要创建引用,因为您真正应该做的就是返回Map从其get()函数返回的内容。如果未在Dog上对Map参数化,例如:Map<Dog>
,那么您您将需要强制转换get的返回值,但您将不需要引用:return (Dog) map.get(id);
或者如果Map被参数化了,return map.get(id)
那一行就是您的整个函数,并且在大多数情况下,它比html" target="_blank">迭代数组要快。 )
问题内容: 我正在寻找一种非常快速,干净且有效的方法来获取以下JSON切片中的最大“ y”值: for-loop是解决此问题的唯一方法吗?我热衷于使用。 问题答案: 要在中找到对象的最大值:
问题内容: 是否有可能从具有特定属性的数组中获取对象?还是我需要遍历数组中的所有对象并检查属性是否是我正在寻找的特定对象? 编辑:谢谢你给我正确的方向,但我有一个转换此问题。 //再编辑一次:好的,如果只有一个特定的结果?这也是可行的方法吗? 问题答案: //这不起作用-NSArray不是Images的子类型-那么如果只有1种可能的结果怎么办? 您无法在编译时证明数组上只有一个可能的结果。您实际要
本文向大家介绍php在数组中查找指定值的方法,包括了php在数组中查找指定值的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php在数组中查找指定值的方法。分享给大家供大家参考。具体如下: php中有两个函数可以判断数组中是否包含指定的值,分别是:array_search($value, $array)和in_array($value, $array),array_search可以找
我的问题是如何编写一个方法,它将Double的ArrayList作为参数,并返回数组列表中最接近-3.75的Double。 有人帮忙吗?还是更好的执行任务的方法?
我有一个包含两个对象的对象数组。每个对象都有几个属性;一个是< code>dealerNo。给定< code>dealerNo的值,我如何获得该对象的索引?
问题内容: 我有一些复杂的对象,例如猫,它具有许多属性,例如年龄,喜爱的猫食等等。 Java集中存储了一堆猫,我需要查找所有3岁的猫,或者最喜欢猫粮的Whiskas。当然,我可以编写一个自定义方法来查找那些具有特定属性的Cat,但是这样做会麻烦许多属性。有一些通用的方法吗? 问题答案: 您可以编写一个采用接口实例的方法,该实例定义了一个方法,该方法可以通过所需的任何属性检查来实现。 更好的是,使其