读书人

java stack的详细兑现分析

发布时间: 2013-03-10 09:38:39 作者: rapoo

java stack的详细实现分析

? ? 通过继承Vector类,Stack类可以很容易的实现他本身的功能。因为大部分的功能在Vector里面已经提供支持了。

Stack里面主要实现的有一下几个方法:

pop

? ? pop方法就是将栈顶的元素弹出来,如果栈里有元素,就取最顶端的那个,否则就要抛出异常:

? ? 我们前面讨论的那些数组的增长,删除元素,查找元素以及修改等功能就占据了vector的大部分。如果有兴趣看vector的源代码的话,会发现里面主要就是这些功能的实现再加上一个迭代器功能。总共的代码不是很多,1200多行,这里就不再赘述了。?

? ? 可以说,vector它本身就是一个可以动态增长的数组。和我们常用的ArrayList很像。和ArrayList的不同在于它对元素的访问都用synchronized修饰,也就是说它是线程安全的。在多线程的环境下,我们可以使用它。

总结

? ? 看前面这些代码,不但理顺了栈和vector的具体实现,还可以从中发现一些其他的东西。比如说,栈最大的长度取决于vector里面数组能有多长。这里vector里面最大能取到Integer.MAX_VALUE。 以前写c程序的代码时经常感叹,要是有那种可以自动增长的数组类型就好了。当然,c99后面确实提供了这个福利。在java里面,比较典型这一部分就由vector提供了。你看,他可以自动按照需要增长,本身是线程安全的,顺便帮你把清楚元素时的内存泄露问题都考虑到了。简直是自动、安全、健康又环保啊:)

参考资料:

http://docs.oracle.com/javase/7/docs/api/java/util/Stack.html

http://docs.oracle.com/javase/7/docs/api/java/util/Vector.html

读书人网 >编程

热点推荐