blob: ab4e12137abfdee0523a18b42a162222e83e462f [file] [log] [blame]
/*
* Copyright 1999-2011 Alibaba Group.
*
* Licensed 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 com.alibaba.dubbo.common.utils;
import java.util.ArrayList;
import java.util.EmptyStackException;
import java.util.List;
/**
* Stack.
*
* @author qian.lei
*/
public class Stack<E>
{
private int mSize = 0;
private List<E> mElements = new ArrayList<E>();
public Stack(){}
/**
* push.
*
* @param ele
*/
public void push(E ele)
{
if( mElements.size() > mSize )
mElements.set(mSize, ele);
else
mElements.add(ele);
mSize++;
}
/**
* pop.
*
* @return the last element.
*/
public E pop()
{
if( mSize == 0 )
throw new EmptyStackException();
return mElements.set(--mSize, null);
}
/**
* peek.
*
* @return the last element.
*/
public E peek()
{
if( mSize == 0 )
throw new EmptyStackException();
return mElements.get(mSize-1);
}
/**
* get.
*
* @param index index.
* @return element.
*/
public E get(int index)
{
if( index >= mSize )
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + mSize);
return index < 0 ? mElements.get(index+mSize) : mElements.get(index);
}
/**
* set.
*
* @param index index.
* @param value element.
* @return old element.
*/
public E set(int index, E value)
{
if( index >= mSize )
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + mSize);
return mElements.set(index < 0 ? index + mSize : index, value);
}
/**
* remove.
*
* @param index
* @return element
*/
public E remove(int index)
{
if( index >= mSize )
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + mSize);
E ret = mElements.remove(index < 0 ? index + mSize : index);
mSize--;
return ret;
}
/**
* get stack size.
*
* @return size.
*/
public int size()
{
return mSize;
}
/**
* is empty.
*
* @return empty or not.
*/
public boolean isEmpty()
{
return mSize == 0;
}
/**
* clear stack.
*/
public void clear()
{
mSize = 0;
mElements.clear();
}
}