1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this work for additional information regarding copyright ownership. 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (the "License"); you may not use this file except in compliance with 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License. You may obtain a copy of the License at 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage java.util; 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code Stack} is a Last-In/First-Out(LIFO) data structure which represents a 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * stack of objects. It enables users to pop to and push from the stack, 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * including null objects. There is no limit to the size of the stack. 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class Stack<E> extends Vector<E> { 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 1224463164541339165L; 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs a stack with the default size of {@code Vector}. 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Stack() { 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(); 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns whether the stack is empty or not. 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return {@code true} if the stack is empty, {@code false} otherwise. 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean empty() { 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return elementCount == 0; 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the element at the top of the stack without removing it. 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the element at the top of the stack. 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws EmptyStackException 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the stack is empty. 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #pop 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public synchronized E peek() { 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (E)elementData[elementCount - 1]; 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IndexOutOfBoundsException e) { 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new EmptyStackException(); 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the element at the top of the stack and removes it. 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the element at the top of the stack. 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws EmptyStackException 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the stack is empty. 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #peek 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #push 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public synchronized E pop() { 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int index = elementCount - 1; 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project E obj = (E)elementData[index]; 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project removeElementAt(index); 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return obj; 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IndexOutOfBoundsException e) { 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new EmptyStackException(); 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Pushes the specified object onto the top of the stack. 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param object 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The object to be added on top of the stack. 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the object argument. 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #peek 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #pop 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public synchronized E push(E object) { 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addElement(object); 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return object; 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the index of the first occurrence of the object, starting from 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the top of the stack. 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the index of the first occurrence of the object, assuming that 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the topmost object on the stack has a distance of one. 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param o 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the object to be searched. 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public synchronized int search(Object o) { 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int index = lastIndexOf(o); 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (index >= 0) 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (elementCount - index); 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return -1; 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 121