ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자료구조 Stack , add vs push
    Java&Spring/Java 2023. 9. 4. 18:15

     

    자바의 스택 자료 구조는 다음과 같이 선언 사용이된다.

     Stack stack = new Stack();
        stack.add(1);
        stack.push(2);
        stack.add(0,71);
        stack.add(stack.size(),71);
        stack.add(stack.size()-1,74);
        System.out.println(stack.peek());
        System.out.println(stack);
    	stack.pop();
       stack.add(stack.size() + 1,100); // out of index

     

     

     

    보통의 자료구조인 stack 을 사용하는 것은 선입 후출의 개념으로 사용이 되며 ,  push , pop 의, 연산을 지원하지만.

     

    Java 의 Stack 의 경우 정말 독특한점은 add() 도 같이 지원을 한다.

     

    이러한 점으로 인하여  ,  "원하는 인덱스에 원하는 값"을 넣을 수가 있다.

     

     

        Stack stack = new Stack();
        stack.add(5);
        stack.add(2);
        stack.add(1);
        System.out.println(stack); // [5, 2, 1]
        stack.push(2);
        stack.add(0,71);
        stack.add(stack.size(),71);
        System.out.println(stack); // [71, 5, 2, 1, 2, 71]
        stack.add(stack.size()-1,74); 
        System.out.println(stack); // //[71, 5, 2, 1, 2, 74, 71]
        System.out.println(stack.peek());

     

     

    반환값

     

    반환값은 add 는 boolean 인 true 를  push 의 경우는 입력한 값을 반환한다.

    index 번 째에 value 값을 넣을거다 !   
    
     stack.add(index ,value) ;
    
    가장 위에 value 값을 넣을 거다! 
    
    
    1. stack.add(stack.size(),value);
    
    
    2. stack.add(value);  // return true
     
    3. stack.push(value); // return value

     

     

    위에 대한 이유로는   Stack 은 Java 의 Vector 를 상속 받았고.

     

    public class Stack<E> extends Vector<E> {
        /**
         * Creates an empty Stack.
         */
        public Stack() {
        }

     

     Vector 는 AbstractList  추상 클라스를 상속받았다.

    public class Vector<E>
        extends AbstractList<E>

     

    AbstractList

    public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {
        /**
         * Sole constructor.  (For invocation by subclass constructors, typically
         * implicit.)
         */
        protected AbstractList() {
        }

     

    iterable 인터페이스를 상속받은 collection에 add 가 있다.  -> List , Set 둘다 add 를 지원한다.

    public interface Collection<E> extends Iterable<E> {

     

    코드를 읽는 입장에서는 add 는 지양을 해야한다. 

    stack 을 선언한 코드를  List 의 insertion을 하는 동작을 넣는다면 의도하지 않는 동작을 야기하는 소프트웨어가 될 수 있다.

Designed by Tistory.