目录
1、自动装箱(拆箱)
2、对象游离
3、算法1.1
4、Kotlin实现下压栈
1、自动装箱(拆箱)
- 自动装箱:自动将一个原始数据类型转换为一个封装类型。
- 自动拆箱:自动将一个封装类型转换为一个原始数据类型。
Stack<Integer> test=new Stack<>();test.push(11); //自动装箱,(int -> Integer)int result=test.pop(); //自动拆箱,(Integer -> int)
2、对象游离
Java的垃圾回收策略是回收所有无法被访问的对象的内存。在我们栈中被pop()的元素的引用仍然存在于数组中。这个元素其实已经是孤儿了---它永远也不会在被访问了,但Java的垃圾收集器无法知道这点,除非该引用被覆盖。
栈中被pop()的元素,即使不再被访问,但是数组中的引用仍然可以让它继续存在,这种情况被称为游离。
简单来说,对象游离就是保存一个不被需要的对象的引用。
3、算法1.1
什么是栈?
栈是限定在表尾进行插入和删除操作的线性表。
栈的内部实现其实就是一个数组,而数组一经创建,它的大小也是不可变的,这里我们将创建一个根据栈内元素的数量自动调整数组大小的算法。
该算法几乎(但还没达到,下一节我们实现)达到了任意集合类数据类型的实现的最佳性能:
- 每项操作的用时都与集合的大小无关
- 空间需求总是不超过集合大小乘以一个常数
public class ResizeStack<T> implements Iterable<T> {private T[] a = (T[]) new Object[2];private int N = 0; // 栈内元素的数量/*** 将元素添加到栈顶*/public void push(T t) {if (N == a.length) {resize(a.length * 2);}a[N++] = t;}/*** 将元素从栈顶删除*/public T pop() {T item = a[--N];a[N] = null; // 避免对象游离if (N>0&&N <= a.length / 4) {resize(a.length / 2);}return item;}private void resize(int size) {T[] temp = (T[]) new Object[size];for (int i = 0; i < N; i++) {temp[i] = a[i];}a = temp;}public boolean isEmpty() { return N == 0;}public int size(){ return N;}public int stackSize() { return a.length;}@NonNull@Overridepublic Iterator<T> iterator() {return new Iterator<T>() {private int i=N;@Overridepublic boolean hasNext() {return i > 0;}@Overridepublic T next() {return a[--i];}};}
}
4、Kotlin实现下压栈
class ResizeStack1<T> : Iterable<T> {private var a = arrayOfNulls<Any>(2) as Array<T?>private var N = 0 // 栈内元素的数量/*** 将元素添加到栈顶*/fun push(t: T) {if (N == a.size) {resize(a.size * 2)}a[N++] = t}/*** 将元素从栈顶删除*/fun pop(): T? {val item = a[--N]a[N]=nullif (N > 0 && N <= a.size / 4) {resize(a.size / 2)}return item}val isEmpty: Booleanget() = N == 0fun size(): Int {return N}fun stackSize(): Int {return a.size}private fun resize(size: Int) {val temp = arrayOfNulls<Any>(size) as Array<T?>for (i in 0 until N) {temp[i] = a[i]}a = temp}override fun iterator(): Iterator<T> {return object : MutableIterator<T> {private var i = Noverride fun hasNext(): Boolean {return i > 0}override fun next(): T{return a[--i]!!}override fun remove() {}}}
}
本文章的大部门内容来之于由Robert Sedgewick和Kevin Wayne著的《算法》第四版书籍中,本文章的目的主要是为了记录自己的学习笔记和技术分享。