-
자료구조 Stack , add vs pushJava&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을 하는 동작을 넣는다면 의도하지 않는 동작을 야기하는 소프트웨어가 될 수 있다.
'Java&Spring > Java' 카테고리의 다른 글
JVM ARCHITECTURE (배경 , 특징 , 컴파일 과정 등) (0) 2023.09.15 Genric 이 타입 일반화인 줄 만 알면, 주니어입니다. (1) 2023.09.04 Sort : Arrays.sort() vs Collections.sort() & 배열 다중 정렬 및 출력 (0) 2023.09.04 GC 기본 개념 , 종류 (0) 2023.09.04 자바를 조심스럽게 열어 보았다 - Switch 문 (1) 2023.05.04