준준의 기록일지

[기본 알고리즘 정리] 배열, 큐 본문

알고리즘

[기본 알고리즘 정리] 배열, 큐

junjunwon 2021. 9. 6. 09:28

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."




Array(배열)

* 같은 종류의 데이터를 효율적으로 관리하기 위해 사용. -> 순차적으로 저장.

* 인덱스 번호를 통한 빠른 접근 가능.

 

 

참고 : Primitive 자료형과 Wrapper 클래스

Java 에서는 int와 Integer 같이, Primitive 자료형과 Wrapper 클래스가 있음.

헤깔리지않게 Integer와 같은 Wrapper 클래스를 사용하자

Wrapper클래스를 사용하는 이유

- null을 용이하게 처리할 수 있고,

- ArrayList 등 객체만을 핸들링하는 기능을 사용할 수 있다.

 

 

ArrayList -  가변 길이의 배열 자료구조를 다룰 수 있는 기능을 제공한다.

 

참고 : List와 ArrayList의 차이

1. List<Integer> list1 = new ArrayList<Integer>(); 

2. ArrayList<Integer> list 1 = new ArrayList<Integer>();

 

List는 인터페이스이고 ArrayList는 클래스이다.

- 클래스는 크게 일반 클래스와 클래스 내에 추상 메서드가 하나 이상 있거나 abstract로 정의된 추상 클래스로 나뉜다.

- 인터페이스는 모든 메서드가 추상 메서드인 경우를 의미하며, 인터페이스를 상속받는 클래스는 인터페이스에서 정의된 추상 메서드를 모두 구현해야 한다. 따라서 다양한 클래스를 상속받는 특정 인터페이스는 결국 동일한 메소드를 제공한다.

 

핵심!!

ArrayList가 아니라  List로 선언된 변수는 다음과 같이 필요에 따라 다른 리스트 클래스를 쓸 수 있는 구현상의 유연성을 제공한다.

- List<Integer> list1 = new ArrayList<Integer>();

- list1 = new LinkedList<Integer>();

-> list1를 ArrayList의 객체로 만들었다가 LinkedList 구현체로 변환이 가능하다. 

-> list는 인터페이스의 추상메서드를 다 구현한 클래스가 ArrayList, LinkedList로 구현한 것이기 때문!

-> 참고의 1번이 더 유용하다는 것! (List<Integer> list1 = new ArrayList<Integer>();

 

 

1. ArrayList<Integer> list = new ArrayList<Integer>();

2. ArrayList<.Integer> list = new ArrayList<>();

1과 2의 차이 => JDK 1.7 이상부터는 인스턴스 생성 시 타입을 추정할 수 있는 경우에는 타입을 생략할 수 있다.

 -> 1은 Integer 형 변수를 명시해줬지만, 2번의 경우 명시하지 않아도, 타입을 추정할 수 있다.

 

ArrayList 가 지원하는 메서드 중 몰랐던 것.

Set Method

-> list.set(0,5) //특정 인덱스에 해당하는 아이템 변경 시 , Set(인덱스번호, 변경할 값) 메서드 사용.

 

배열 indexof

- 문자열 indexof(String value)  :  문자 value가 해당 문자열에 있으면 해당 문자의 위치 (index 값)을 리턴하고, 없으면 -1를 리턴함.

 

 

 

- FIFO(First-In, Frist-out)

- 인덱스없이 맨 처음 들어온걸 계속 꺼내는 구조!!

- 알아둘 용어!

     - Enqueue : 큐에 데이터를 넣는 기능

     - Dequeue : 큐에 데이터를 꺼내는 기능

 

 

JAVA에서의 큐 자료구조

- java.util패키지의 queue클래스 제공.

Enqueue 에 해당하는 기능으로 Queue 클래스에서는 add(value) 또는 offer(value) 메서드를 제공

Dequeue 에 해당하는 기능으로 Queue 클래스에서는 poll() 또는 remove() 메서드를 제공함.

아쉽게도 Queue 클래스에 데이터 생성을 위해서는 java.util 패키지에 있는 LinkedList 클래스를 사용해야 함.

     - LinkedList 클래스는 자료구조의 링크드리스트와 연결이 있으며 관련 내용은 큐보다 복잡하다.

 

 

참고 : 큐는 어디에 많이 쓰일까?

- 멀티 태스킹을 위한 프로세스 스케쥴링 방식을 구현하기 위해 많이 사용됌.

- 큐의 경우에는 장단점보다는 큐의 활용 예로 프로세스 스케쥴링 방식을 함께 이해해두는 것이 좋다.