栈的学习
栈存储数据是先进后出的形式
用java语言来实现的话如下
package com.example;
import java.util.Stack;
/**
* @author ChenLang 模拟栈的先进后出等
*/
public class StackDemo {
int[] stack;
int top;//表示栈顶
public StackDemo() {
stack = new int[10];
top = -1;
}
public StackDemo(int element) {
stack = new int[element];
top = -1;
}
//压栈
public void push(int value) {
stack[++top] = value;
}
//出栈
public int pop() {
return stack[top--];
}
//判断是否为空
public boolean isEmpty() {
if (top >= 0) {
return true;
}
return false;
}
//判断是否满了
public boolean isFull() {
if (stack.length-1 == top) {
return true;
}
return false;
}
}
用java实现后开始看jdk提供的stack的源码,并改造原先的代码
stack继承了vector类,该类可实现自动增长的对象数组。
vector的学习:
源码中有三个构造方法:
一:public Vector(int initialCapacity, int capacityIncrement) {
super();
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
this.elementData = new Object[initialCapacity];
this.capacityIncrement = capacityIncrement;
}
二:
public Vector(int initialCapacity) {
this(initialCapacity, 0);
}
三:public Vector() {
this(10);
}
其中:initialCapacity设定向量对象初始容量,当真正存放的数据超过容量时,系统会扩充向量对象的存储容量
capacityIncrement这个参数给定的是每次扩充容量的值。如果这个数是0则每次扩充一倍,利用这个方法可以优化存储,减少内存泄露
缺点:数据太大时,vector就会消耗很多额外的资源,使应用程序的性能下降,(有可能是数据太多了导致vector分配内存失败,因为vector是用数组存放的,需要连续的存储空间)同时vector一旦插入或者删除数据之后,迭代器就失效了
同时vector是线程安全,因此访问相比较而言会慢些;