일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 영속성
- 컨디션 변수
- 자료구조
- codility
- 운영체제
- I/O장치
- 알고리즘
- OS
- 락
- DirectX 12
- 그리디알고리즘
- 다이나믹 프로그래밍
- 렌더링 파이프라인
- directx
- 동적계획법
- DirectX12
- 병행성
- 병행성 관련 오류
- 디자인패턴
- 멀티프로세서
- Direct12
- 다이나믹프로그래밍
- 파일시스템 구현
- 스케줄링
- 쓰레드
- 프로그래머스
- 타입 객체
- 백준
- 그리디 알고리즘
- 멀티쓰레드
- Today
- Total
기록공간
컬렉션 프레임워크 (Collection Framework) - 1 (stack, queue) 본문
컬렉션 프레임워크는 컬렉션(모아놓은 데이터들 or 자료 구조)의 표현과 조작을 위한 통일된 아키텍처이다. 컬렉션 프로임워크를 구성하는 요소는 다음과 같다.
-
인터페이스(Interface) : 기본적으로 컬렉션에 필요한 데이터 관리 기능을 제공한다. 예를 들면, List는 추가, 삭제, 검색 기능을 제공하는 컬렉션 인터페이스가 존재한다. 각 컬렉션마다 고유의 인터페이스가 정의되어 있다.
-
구현(Implementation) : 인터페이스를 구현한 클래스로 각 컬렉션을 실제 어떤 자료구조를 이용하여 표현했느냐에 따라 컬렉션의 종류가 달라지게 된다.
-
알고리즘(Algorithms) : 각 컬렉션들마다 유용하게 사용할 수 있는 메소드를 의미한다.
※ 자바 컬렉션은 견고한 컬렉션 프레임워크 기반 위에 정의되어 있으므로 각 컬렉션 종류마다 제공되는 메소드의 일관성이 있기 때문에 한 가지 컬렉션을 익혀두면 다른 컬렉션을 사용하는데에 용이하다.
Stack
Stack 클래스는 오브젝트 후입선출(LIFO : Last In First Out) 구조의 Stack을 나타낸다. 이는 벡터(Vector)를 스택으로 처리하는 5개의 메소드로 Vector 클래스를 확장하게 된다.
제네릭 표현식
Stack<Object> myStack = new Stack<Object>();
Stack 뿐만 아니라 어느 컬렉션 변수를 선언할때에도 이렇게 제네릭 표현식을 붙여줘야 한다. 제네릭 표현식으로 어떤 자료형을 담을 지를 미리 알려주어 데이터의 안정성을 보장해주는 기능을 한다.
Stack의 주요 메서드
- add(E item), push(E item)
Stack<Object> myStack = new Stack<Object>();
String str1 = "이준구";
String str2 = "이진주";
String str3 = "정의진";
String str4 = "조영욱";
myStack.add(str1);
myStack.add(str2);
myStack.push(str3);
myStack.push(str4);
add(), push()는 Stack에 데이터를 추가하는 메서드이다.
- boolean empty()
Stack<Object> myStack = new Stack<Object>();
String str1 = "이준구";
String str2 = "이진주";
String str3 = "정의진";
String str4 = "조영욱";
myStack.add(str1);
System.out.println(myStack.isEmpty());
//--==>> true
해당 Stack 변수가 비어있는지 알려주는 메서드이다. Stack에 아무런 데이터도 추가되지 않았다면 true 하나라도 존재한다면 false를 반환한다.
- E Object peek() (여기서 E는 Element의 약자)
Stack<Object> myStack = new Stack<Object>();
String str1 = "이준구";
String str2 = "이진주";
String str3 = "정의진";
String str4 = "조영욱";
myStack.add(str1);
myStack.add(str2);
myStack.push(str3);
myStack.push(str4);
String val1 = (String)myStack.peek();
System.out.println(val1);
//--==>> 조영욱
Stack의 맨 마지막에 추가한 객체를 스택에서 제거하지 않고 반환한다. 반환 값은 제네릭 표현식으로 설정한 자료형 타입이다.
- E Object pop()
Stack<Object> myStack = new Stack<Object>();
String str1 = "이준구";
String str2 = "이진주";
String str3 = "정의진";
String str4 = "조영욱";
myStack.add(str1);
myStack.add(str2);
myStack.push(str3);
myStack.push(str4);
String val1 = (String)myStack.push();
System.out.println(val1);
//--==>> 조영욱
String val2 = (String)myStack.push();
System.out.println(val2);
//--==>> 정의진
반환은 위의 peek()과 동작은 같지만 다른 점은 맨 마지막에 추가한 객체를 삭제한다.
- int search(Object o)
Stack<Object> myStack = new Stack<Object>();
String str1 = "이준구";
String str2 = "이진주";
String str3 = "정의진";
String str4 = "조영욱";
myStack.add(str1);
myStack.add(str2);
int pos = myStack.search(str2);
System.out.println(pos);
//--==>> 1
myStack.push(str3);
myStack.push(str4);
pos = myStack.search(str2);
System.out.println(pos);
//--==>> 3
스택의 맨 위에서부터 파라미터 값으로 넘겨받은 객체까지의 거리를 정수형으로 반환한다. 만약 객체가 맨뒤에 있다면 1을 반환하고, 그 아래로 내려가면서 1씩 증가한다.
Queue
Queue(큐)는 선입선출(FIFO, First In First Out) 구조로 되어있는 Queue이다. 먼저 입력된 자료를 출력하며, Queue 인터페이스를 구현한 클래스는 큐와 관련된 다양한 기능을 제공한다.
※ Queue 인터페이스 인스턴스를 생성하기 위해서는 new 연산자를 이용하여 Queue 인터페이스를 구현한(implements) 클래스의 생성자를 호출한다.
Queue의 주요 메서드
- boolean offer(E o)
Queue<Object> myQueue = new LinkedList<Object>();
String str1 = "이준구";
String str2 = "이진주";
String str3 = "정의진";
String str4 = "조영욱";
myQueue.offer(str1);
myQueue.offer(str2);
myQueue.offer(str3);
myQueue.offer(str4);
지정된 요소를 큐에 삽입한다.
- E element(), peek()
Queue<Object> myQueue = new LinkedList<Object>();
String str1 = "이준구";
String str2 = "이진주";
String str3 = "정의진";
String str4 = "조영욱";
myQueue.offer(str1);
myQueue.offer(str2);
myQueue.offer(str3);
myQueue.offer(str4);
System.out.println("값1 : " + (String)myQueue.element());
System.out.println("값2 : " + (String)myQueue.element());
//--==>> 값1 : 이준구
// 값2 : 이준구
System.out.println("값1 : " + (String)myQueue.peek());
System.out.println("값2 : " + (String)myQueue.peek());
//--==>> 값1 : 이준구
// 값2 : 이준구
Queue의 head 요소를 반환하며 삭제하지 않는다. peek() 메서드의 경우 Queue 자료구조가 비어 있는 경우에는 null을 반환한다.
- E remove, poll()
Queue<Object> myQueue = new LinkedList<Object>();
String str1 = "이준구";
String str2 = "이진주";
String str3 = "정의진";
String str4 = "조영욱";
myQueue.offer(str1);
myQueue.offer(str2);
myQueue.offer(str3);
myQueue.offer(str4);
System.out.println("값1 : " + (String)myQueue.remove());
System.out.println("값2 : " + (String)myQueue.remove());
//--==>> 값1 : 이준구
// 값2 : 이진주
System.out.println("값1 : " + (String)myQueue.poll());
System.out.println("값2 : " + (String)myQueue.poll());
//--==>> 값1 : 정의진
// 값2 : 조영욱
Queue의 head 요소를 반환하고 삭제한다. poll() 메서드의 경우 Queue 자료구조가 비어 있는 경우에는 null을 반환한다.
'Java' 카테고리의 다른 글
컬렉션 프레임워크 (Collection Framework) - 3 (set, map) (0) | 2020.10.01 |
---|---|
컬렉션 프레임워크 (Collection Framework) - 2 (list, Iterator...) (0) | 2020.09.18 |
예외 처리(Exception Handling) (0) | 2020.09.01 |
Java의 주요 클래스(3) (0) | 2020.09.01 |
문자 집합 (Character Set) (0) | 2020.08.31 |