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