티스토리 뷰

1. 배열과 리스트의 관계


배열은 인덱스를 통해 데이터를 순차적으로 저장할 수 있다. 

그리고 JVM은 배열이 생성될 때, 크기를 반드시 알아야만 하기 때문에 초기 생성 시, 반드시 크기를설정해주어야 한다.


ArrayList는 특정 타입의 값들을 인덱스를 통해 순차적으로 저장되있는 컬렉션이다. ArrayList는 크기 지정에 한계가 없으므로, ArrayList를 사용하기 전에 크기를 반드시 지정할 필요가 없다. ArrayList의 기본 크기는 10이고, ArrayList 크기의 50% 씩 증가한다. (10, 15, 22 ...) 그렇다면 ArrayList는 어떻게 동적으로 계속해서 크기를 늘릴 수 있을까?! 기존에 ArrayList에 저장된 데이터를 복제할 때, 크기를 50% 증가시킨 ArrayList의 형태로 복제하여 대입하는 방식으로 동작한다. 

그렇기 때문에 크기가 큰 컬렉션을 이용할 때는 ArrayList의 기본 크기를 할당해야만 한다. 

그러면 ArrayList 크기를 키우느라 ArrayList를 재할당하는 작업을 줄 일 수 있다. 만약 컬렉션에 5000개의 데이터를 넣어야 한다면, 처음에 10개의 데이터를 넣고, (크기 증가 + 데이터 복제) 작업 수행하고, 15개의 데이터를 넣고, 작업을 수행하고 계속 반복해야만 한다. 효율이 떨어지지 않는가?! 

또한, ArrayList는 데이터의 수가 증가하면 크기가 50%씩 증가하지만, 데이터의 수가 감소한다고 해서 ArrayList의 크기가 감소하지 않는다.


ArrayList에 다음과 같이 "List : [0, 1, 2, 3, 4, 5]" 이 저장되었다고 하자. 여기서 3번째 인덱스에 해당하는 3을 삭제를 할 때, 3을 리스트에서 제거한 후, 

4를 인덱스 3위치에, 5를 인덱스 4위치로 이동시키는 Shift 작업을 수행한다. 이처럼 ArrayList는 순차적으로 데이터를 삽입/삭제하는 것이 유리하다.


위와 같이 중간의 데이터를 삭제할 때는 LinkedList가 유리하다. LinkedList 이름처럼 체인을 통해 앞, 뒤 데이터의 위치정보를 가지고 있다.

그렇기 때문에 중간 데이터가 삭제하면 앞 뒤의 데이터의 위치정보만 바꾸면 된다. 예를들어, "List : [0, 1, 2, 3, 4, 5]" 에서 3을 삭제해보자.

2는 앞 뒤 데이터인 1과 3의 위치정보를 가지고 있고, 4는 3과 5의 위치정보를 가지고 있다. 3이 삭제되면, 2는 3의 위치정보를 제거하고, 대신에 4의 위치정보를 갖는다. 그리고 4도 3의 위치정보를 제거하고 2의 위치정보를 얻는다. 그래서 2와 4를 연결한다. 


2. Stack, Queue, Dequeue


스택은 LIFO (Last Input First Out) 자료구조를 구현한 자바 인터페이스이다. 마지막에 삽입한 데이터를 우선적으로 꺼낼수 있다. 

큐는 FIFO (First Input First Out), 처음에 삽입한 데이터를 우선적으로 꺼낼 수 있다. 덱은 자료구조 양끝에서 데이트를 삽입/삭제할 수 있다.


3. Map


'키-값' 형태 Entry 클래스를 저장하는 저장소. Map을 구현할 때는 Map 인터페이스를 사용한다. (List와 Set은 Collection 인터페이스를 사용한다.)

키 인스턴스 값은 Map의 어디에 값이 있는지를 정의한다. hashCode() 메소드는 객체의 주소값을 16진법으로 출력하는 메소드로, 이 값을 이용해서

Map의 어디에 값이 있는지 확인하는데 사용한다. 하지만, hashCode() 메소드는 정수형으로 출력되기 때문에 표현할 수 있는 키 인스턴스의 값에 한계가 있다.

그렇다보니, 간혹, 서로 다른 객체이지만, 동일한 키값을 가지는 경우가 가끔 가끔 존재한다. 


4. Tree


트리는 스택이나 큐와 같은 선형 구조가 아닌 비선형 자료구조이다. 트리는 계층적 관계(Hierarchical Relationship)을 표현하는 자료구조이다.


아래 자료는 자바를 공부하면서 자주 질문되는 정의에 대해 간단하게 정리한 내용이다. 정말 간단하다.

간단자바정리.pdf




공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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
글 보관함