在Java arrayList中,我有两个不同的列表用于同一个类TGrid
。一个有大约1000个,另一个有10个元素
现在在我的功能中,我必须根据if / else条件重置一些元素
在这里,我有两个选项可以执行相同的操作但是我需要知道哪个更适合性能。
类别:
public class TGrid{
private String pType;
private boolean one ;
private boolean one6;
private boolean one7;
private boolean three2;
getter --- setter
}
现在功能,重置对象
选项1:
tGridList.get(count).setPType("");
tGridList.get(count).setOne(false);
tGridList.get(count).setOne6(false);
tGridList.get(count).setOne7(false);
tGridList.get(count).setThree2(false);
选项2:
tGridList.set(count, new TGrid());
问题:哪个选项可以提供更好的效果?
答案 0 :(得分:1)
我假设第一个选项更快。在这两个选项中,您都可以设置值。在第一个选项中,它是显式完成的,在第二个选项中,它是在创建对象后由构造函数隐式完成的。因此第一个和第二个选项之间的主要区别是第二个选项的构造函数调用。因此,我认为这项额外工作将导致第二种选择的表现较弱。
但是,你必须做一些性能测试才能获得自信的结果。
答案 1 :(得分:1)
可能第一种选择是随着时间的推移越快。你应该把它重写为
TGrid t = tGridList.get(count);
t.setPType("");
t.setOne(false);
t.setOne6(false);
t.setOne7(false);
t.setThree2(false);
甚至在TGrid中引入clear() - 方法。
与第二个选项相比,这不会遇到阻塞问题。第二个新呼叫可以在内存压力下阻止整个虚拟机。
不好的一面是你改变了实例,意味着你必须关心同步。 “关心”包括积极忽视它;)