将几个对象放入ArrayList中的一行

时间:2015-09-09 07:10:06

标签: java arraylist

我有几个来自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对象,我想把它放在列表中,那么它如何才能获得最高性能呢?

2 个答案:

答案 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)的开销,然后你会节省性能。我挑战你找到一个实际的例子来做到这一点。