컴퓨터 공부/JAVA

[JAVA] arrayList와 linkedList 차이점

나정_ 2013. 3. 15. 15:06


ArrayList와 LinkedList에 대하여 알아보자 ! 


먼저 ArrayList와 LinkedList에 대해서 알아보기 전에 List(리스트)에 대하여 알아야합니다. 

리스트란 데이터를 일렬로 늘어높은 자료구조를 말합니다. 

자바에서는 이러한 List(리스트)로 사용할 수 있는 몇몇 클래스가 있으며 그 중 대표적으로 많이 사용하는 것이 ArrayList와 LinkedList입니다. 

이 둘은 사용방법은 비슷하지만 내부에 데이터를 저장하는 방법이 달라 개념을 명확히 알고 사용하는 것이 좋습니다.  


1. ArrayList란


1. 정의 

ArrayList란 객체 내부에 있는 배열에 데이터를 저장하는 방식입니다.

아래 그림을 보면 이해하기가 쉬우므로 참고하시길 바랍니다. 

[그림1]


2. 사용방법 

ㄱ. 데이터 타입 설정하기 

ArrayList 클래스로 리스트를 만들기 위해서는 먼저 리스트에 저장할 데이터타입을 정해야 합니다.

참고로 ArrayList 클래스를 포함한 모든 자료구조 클래스에는 레퍼런스타입 데이터만 저장할 수 있으므로 primitive 타입으로 타입파라미터를 설정하면 안된다는것을 유의하실 바랍니다. 

ex) ArrayList <String> list = new ArrayList<String>();  // 두껍게 표시한 부분이 저장할 데이터타입입니다. 


ㄴ. ArrayList 객체 생성하기 

ArrayList <String> list = new ArrayList<String>()  와 같이 new로 객체를 생성하는데 이렇게 객체를 생성할시 String 객체 10개를 담을 수 있는 배열이 생성됩니다. 이 배열의 크기는 리스트에 저장된 데이터 수가 늘어가면 자동적으로 늘어가지만 처음부터 배열의 크기를 크게 잡고싶으면 배열 크기를 생성자 파라미터로 넘겨주면 됩니다. 

ex) ArrayList <String> list = new ArrayList<String>(40); 


3. 객체 추가/조회/수정/삭제하는 방법 

arrayList에는 add메소드를 사용하여 데이터를 추가할 수 있습니다.

arrayList에는 get 메소드를 사용하여 데이터를 가져올 수 있습니다. 

arrayList에는 set 메소드를 사용하여 데이터를 수정할  수 있습니다. 

arrayList에는 remove메소드를 사용하여 데이터를 삭제할 수 있습니다. 

추가적으로 관련 메소드를 확인하고 싶다면 http://docs.oracle.com/javase/6/docs/api/ 로 들어가서 참고하시길 바랍니다. 


[그림2] 


4. 실제 예제 

import java.util.*;

class ArrayListTest{

public static void main(String args[]){

ArrayList <String> list = new ArrayList<String>(); // 객체 생성

list.add("A");

list.add("B"); 

list.add("C");

list.set(2,"D");

list.remove(1); // 혹은 list.remove("B"); 


for(int i=0;i<list.size();i++){

String result = list.get(i);

System.out.println(result);

}

}

}


출력문 : 

A

D  


2. LinkedList란


1. 정의 

LinkedList는 인접 데이터들을 서로 가리키는 방식으로 데이터를 저장합니다.

 

2. 사용방법 

사용방법은 ArrayList와 매우 흡사합니다. 


3. 실제 예제 

import java.util.*;

class ArrayListTest{

public static void main(String args[]){

LinkedList<String> list = new LinkedList<String>(); // 객체 생성

list.add("A");

list.add("B"); 

list.add("C");

list.set(2,"D");

list.remove(1); // 혹은 list.remove("B"); 


for(int i=0;i<list.size();i++){

String result = list.get(i);

System.out.println(result);

}

}

}


출력값
A
D


ArrayList와 LinkedList의 차이점


ArrayList에 데이터를 삼입하고 수정하고 삭제할때, 리스트 중간에 데이터를 삽입하면 그 뒤에 있는 데이터가 하나씩 뒤로 밀려가지만, 
LinkedList는 데이터 삽입 위체의 앞뒤에 있는 데이터의 상호 링크를 끊고 삽입할 데이터를 원래 링크에 맺고 있던 데이터와 다시 연결한다.