창고 (Stack) 의 실현 -- 순서 창고 -- 자바

2360 단어 자바 기반
java.util
Class Stack
  • java.lang.Object
  • java.util.AbstractCollection
  • java.util.AbstractList
  • java.util.Vector
  • java.util.Stack




  • All Implemented Interfaces: Serializable, Cloneable, Iterable, Collection, List, RandomAccess

  • 스 택 의 기본 작업 은 스 택 에 초기 화, 입 스 택, 출 스 택, 스 택 의 정상 요 소 를 가 져 오고 스 택 이 비어 있 는 지 판단 하 며 스 택 안의 요소 개 수 를 가 져 옵 니 다.은밀 한 기능: 창고 가 꽉 찼 는 지 판단 하고 꽉 찼 으 면 용량 을 늘 려 야 합 니 다.
    패 키 징 은 하나의 Stack 을 실현 하고 스 택 내 매개 변수 로 범 형 을 사용 합 니 다.
    package d20180828.ch11;
    
    import java.util.Arrays;
    
    public class Stack {
    
        private int size = 0;
        private Object[] array;
        //       
        public Stack(){
            this(10);
        }
    
        //        
        public Stack(int initialCapacity){
            if(initialCapacity <= 0){
                throw new RuntimeException("        ");
            }
            array = new Object[initialCapacity];
        }
        //  
        public E push(E item){
            ensureCapacityHelper(size+1);
            array[size++] = item;
            return item;
        }
        //      
        public E peek(){
            if(isEmpty()){
                throw new IndexOutOfBoundsException("   ");
            }
            return (E) array[size-1];
        }
        //  
        public E pop(){
            E item = peek();
            size--;
            return item;
        }
        //     
        public boolean isEmpty(){
            return size == 0;
        }
        public int size(){
            return size;
        }
        //      
        private void ensureCapacityHelper(int minCapacity){
            if(minCapacity > array.length){
                grow();
            }
        }
        //   
        private void grow(){
            int oldCapacity = array.length;
            int newCapacity = oldCapacity*2;
            if(newCapacity < oldCapacity){
                //     
                throw new OutOfMemoryError();
            }else{
                array = Arrays.copyOf(array, newCapacity);
            }
        }
    }
    

    테스트 코드
    package d20180828.ch11;
    
    public class StackTest {
    
        public static void main(String[] args){
            Stack s = new Stack();
            s.push("a");
            s.push("b");
            System.out.println(s.pop());
            System.out.println(s.peek());
        }
    }
    

    좋은 웹페이지 즐겨찾기