Java&Spring/Java

자료구조 Stack , add vs push

sung.hyun.1204 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을 하는 동작을 넣는다면 의도하지 않는 동작을 야기하는 소프트웨어가 될 수 있다.