一、问题
今天刷题的时候,总有疑惑,为什么自己代码的思路和别人差不多却总是慢那么多,然后才发现原来是我使用的是java自带的栈的问题,而别人用的是自己数组实现栈。
使用java提供的栈的运行时间:
而改成数组实现栈后的时间:
二、问题根源
其实就是java提供的栈初始化的时候固定了长度,是10:
java.util.Stack
继承了java.util.Vector
类。java.util.Stack
类只有一个构造方法:public Stack() {}
,因此会调用到父类里的构造方法public Vector() {this(10);}
:
然后当添加元素的时候,会遇到扩容问题:push
调用的是java.util.Vector
里的addElement(E obj)
方法:
- 可以看到
java.util.Vector
里的addElement(E obj)
:
- 会涉及到扩容问题,如果测试集比较大,那么栈的深度也需要越来越深,此时就容易扩容,扩容需要复制原来的元素到新的地方,因此会造成时间的浪费。
三、总结
综上所述,如果遇到不能够自己确定长度的java自带的数据结构,可以自己简单实现,因为自己简单实现可以确认长度,确认长度后不会有扩容问题。