Java源码之Stack

来源:互联网 发布:计算机编程英语词汇 编辑:程序博客网 时间:2024/06/03 09:26

Java源码之Stack


转载请注明出处:http://blog.csdn.net/itismelzp/article/details/50371987


Stack的源码较短,在这里直接贴出:

Stack继承自Vetor实现的,所以基础的策略也来自Vector


/* *  Licensed to the Apache Software Foundation (ASF) under one or more *  contributor license agreements.  See the NOTICE file distributed with *  this work for additional information regarding copyright ownership. *  The ASF licenses this file to You under the Apache License, Version 2.0 *  (the "License"); you may not use this file except in compliance with *  the License.  You may obtain a copy of the License at * *     http://www.apache.org/licenses/LICENSE-2.0 * *  Unless required by applicable law or agreed to in writing, software *  distributed under the License is distributed on an "AS IS" BASIS, *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *  See the License for the specific language governing permissions and *  limitations under the License. */package java.util;/** * 栈是一种“先入后出”的数据结构,使用者可以对栈进行元素的“弹出”、“压入”等操作, * 元素可以为null。栈的容量大小没有限制。 */public class Stack<E> extends Vector<E> {    private static final long serialVersionUID = 1224463164541339165L;    /**     * Constructs a stack with the default size of {@code Vector}.     */    public Stack() {    }    /**     * 调用父类方法isEmpty判断     */    public boolean empty() {        return isEmpty();    }    /**     * 返回栈顶元素(元素不删除)     */    @SuppressWarnings("unchecked")    public synchronized E peek() {        try {            return (E) elementData[elementCount - 1]; // elementData见Vector        } catch (IndexOutOfBoundsException e) {            throw new EmptyStackException();        }    }    /**     * 删除栈顶元素,并返回顶栈元素     */    @SuppressWarnings("unchecked")    public synchronized E pop() {        if (elementCount == 0) {            throw new EmptyStackException();        }        final int index = --elementCount;        final E obj = (E) elementData[index];        elementData[index] = null;        modCount++; // 修改次数记数 + 1        return obj;    }    /**     * 元素入栈     */    public E push(E object) {        addElement(object); // 依然是父类方法addElement        return object;    }    /**     * 返回元素在栈中的索引(栈顶元素索引为0,往下递增)     */    public synchronized int search(Object o) {        final Object[] dumpArray = elementData;        final int size = elementCount;        if (o != null) {            for (int i = size - 1; i >= 0; i--) {                if (o.equals(dumpArray[i])) {                    return size - i;                }            }        } else { // 所查找元素为null的情况            for (int i = size - 1; i >= 0; i--) {                if (dumpArray[i] == null) {                    return size - i;                }            }        }        return -1;    }}


0 0
原创粉丝点击