我有几个来自org.eclipse.swt.widget.Control
类型的对象,我想将它们放在一行ArrayList
中。
List<Control> list = new ArrayList<Control>();
Label label = new Label(container, SWT.None);
label.setText("Label");
combo = createCCombo(container, Arrays.asList("1", "2", "3"));
combo.select(0);
list.add(label);
list.add(combo);
我想用和只用一个替换两行。如果我只有两个Control
对象,我想把它放在列表中,那么它如何才能获得最高性能呢?
答案 0 :(得分:3)
{{1}}
答案 1 :(得分:1)
我认为@kocko的回答是这里提出的问题的最简单和正确的解决方案。
虽然如果你在循环中这样做,这个解决方案最终会更有效率,因为它会阻止创建新的临时List
:
final List<Control> list = new ArrayList<>();
final List<Control> labelCombo = new ArrayList<>(2);
for (...) {
labelCombo.set(0, label);
labelCombo.set(1, combo);
list.addAll(labelCombo);
}
但对于潜在粉丝(以及OP本人),一句警告:
性能优化应该通过实际测试性能来完成,并找出测量结果(分析器)以及性能松散,并测试前后“修复”解决方案。
在目前的情况下,这种方法几乎不可能为您提供性能,而且很可能会给您带来更差的性能。
这是由于ArrayList
在幕后扩展其存储大小的方式。如果你设法不那么频繁地触发这个,反过来节省更多的性能,那么设置/添加每个Control
2次(首先到labelCombo
,然后到list
)的开销,然后你会节省性能。我挑战你找到一个实际的例子来做到这一点。