初始化JComboBox的两种方式对比_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 初始化JComboBox的两种方式对比

初始化JComboBox的两种方式对比

 2017/9/25 18:38:19  huangqiqing123  程序员俱乐部  我要评论(0)
  • 摘要:方式一JComboBoxcomboBox=newJComboBox();longt1=System.currentTimeMillis();for(inti=0;i<10000;i++){comboBox.addItem(newInteger(i));}longt2=System.currentTimeMillis();System.out.println(t2-t1);t2-t1=1毫秒方式二longt1=System.currentTimeMillis()
  • 标签:方式

?

方式一

?

class="java" name="code">JComboBox comboBox = new JComboBox();
		long t1 = System.currentTimeMillis();
		for (int i = 0; i < 10000; i++) {
			comboBox.addItem(new Integer(i));
		}
		long t2 = System.currentTimeMillis();
		System.out.println(t2-t1);

t2-t1=1毫秒

?

?

?方式二

?

long t1 = System.currentTimeMillis();
		Vector v = new Vector(10000);
		for (int i = 0; i < 10000; i++) {
			v.add(new Integer(i));
		}
		ComboBoxModel model = new DefaultComboBoxModel(v);
		comboBox.setModel(model);
		long t2 = System.currentTimeMillis();
		System.out.println(t2-t1);

?

?t2-t1=40毫秒

?

?

说明:

方式一只是简单的往JComboBox 中添加数据项,,这种方法对于小数据量来说可以,但是当要添加大量数据时就会明显变得非常慢。

尽管方式一代码没有明确引用任何模型,JComboBox 的模型对象实际上是参与这个过程的,每次调用addItem 时,JComboBox 内部发生了许多操作:

组件将请求传递给JComboBox 的模型,模型发送一个事件表明一个新项被添加。

?

方式二之所以更快,原因有两个。

第一,因为所有项是一次添加到模型去,而不是一个一个的,只有一个事件发出,这意味着更少的事件触发,更少的方法调用。

第二,是因为需要通知变化的对象更少,总的工作量等于触发次数乘以侦听器数目。因为模型是新创建的,侦听在上面的侦听器为零,这意味着没有触发事件发生。

?

从上面的例子可以学到两点:

尽可能使用批操作,尽量减少触发事件的数量。

当初始化或者需要完全替换模型的内容时,考虑重新生成模型,不要使用已经存在的模型,已存在模型上已经保持了很多的侦听器,新生成的模型没有侦听器,这样避免了不必要的处理函数的调用。

?

?

?

?

?

?

?

?

?

?

?

发表评论
用户名: 匿名