1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
/* Copyright (C) 1998, 1999 Cygnus Solutions
This file is part of libgcj.
This software is copyrighted work licensed under the terms of the
Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
details. */
package java.util;
/**
* @author Warren Levy <warrenl@cygnus.com>
* @date August 20, 1998.
*/
/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
* "The Java Language Specification", ISBN 0-201-63451-1
* plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
* Status: Believed complete and correct
*/
public class Stack extends Vector
{
// Could use Vector methods internally for the following methods
// but have used Vector fields directly for efficiency (i.e. this
// often reduces out duplicate bounds checking).
public boolean empty()
{
return elementCount == 0;
}
public synchronized Object peek()
{
if (elementCount == 0)
throw new EmptyStackException();
return elementData[elementCount - 1];
}
public synchronized Object pop()
{
if (elementCount == 0)
throw new EmptyStackException();
Object obj = elementData[--elementCount];
// Set topmost element to null to assist the gc in cleanup
elementData[elementCount] = null;
return obj;
}
public Object push(Object obj)
{
// When growing the Stack, use the Vector routines in case more
// memory is needed.
// Note: spec indicates that this method *always* returns obj passed in!
addElement(obj);
return obj;
}
public synchronized int search(Object obj)
{
// Return the position of obj on the stack as measured from the top;
// i.e. the top element is 1, the next element down is 2, etc.
// If obj is not on the stack, return -1
for (int i = elementCount-1; i >=0; --i)
if (elementData[i].equals(obj))
return elementCount - i;
return -1;
}
}
|