Java List Collection - ArrayList, LinkedList, Vector



예시 리스트



1. ArrayList : 가변적인 크기의 배열

- 동작 방식(삽입)

AL1

AL2

ex) 2번 자리의 추가

2번 자리의 추가를 한다면 맨 뒤 빈자리가 추가된다.

이후 2~4번의 앉아있던 사람이 한칸씩 뒤로 이동한다.

그리고 이동 후 빈자리의 새 값이 들어간다.


=> 삭제도 마찬가지의 과정을 거친다.



※ 따라서 ArrayList는 검색 속도는 빠르지만, 중간 삽입/삭제가 많다면 아주 비효율적이다.





2. LinkedList : ArrayList와 사용 방법 등 똑같지만 내부 동작 구조가 다르다.

- 동작 방식(삽입)

LL1

LL2

ex) 2번 자리에 추가

LinkedList는 내부 객체들끼리 링크로 연결되어 있다.

따라서 ArrayList처럼 자리이동 없이 이 링크만 끊어준 후 다른곳으로 연결만 해주면 된다.



※ 이처럼 ArrayList와 달리 중간에 삽입/삭제가 발생하여도 빠르게 할 수 있다. 하지만 링크를 타고 움직이므로 탐색은 느리다.




3. Vector : ArrayList와 사용 방법 등 똑같지만 스레드의 안전(Thread-Safe) 하다.








결과

결과





코드

package pk;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Vector;

public class Test {

	public static void main(String[] args) {
		ArrayList<String> al = new ArrayList<>();
		Vector<String> v = new Vector<>();
		LinkedList<String> ll = new LinkedList<String>();
		
		System.out.println("- 객체 삽입 -");
		al.add("a");	// a
		al.add("c");	// a c
		al.add("b");	// a c b
		al.add("a");	// a c b a
		al.add(2, "x");	// a c x b a
		
		al.set(1, "y");	//  a y x b a
		System.out.print("값 확인 : ");
		for(String s : al) System.out.print(s + ", ");
		System.out.println("\n");
		
		
		System.out.println("- 객체 검색 -");
		if( !al.isEmpty() ) System.out.println("리스트가 비어있지 않습니다.");
		System.out.println("개수 : " + al.size());
		if( al.contains("a") ) System.out.println( "a가 있습니다." );
		System.out.println("index 2의 객체 : " + al.get(2) + "\n");
		
		
		System.out.println("- 객체 삭제 -");
		System.out.print("index 2 삭제 : ");		
		al.remove(2);	//  a y b a
		for(String s : al) System.out.print(s + ", ");
		System.out.print("\na 찾아서 삭제 : ");
		al.remove("a");	//  y b a
		for(String s : al) System.out.print(s + ", ");
		System.out.print("\n 리스트 비우기 : ");
		al.clear();
		if( al.isEmpty() ) System.out.println("리스트가 비었습니다.");
	}

}



List Collection 메소드들



boolean add(E e) : 맨 뒤에 객체 추가


void add(int index, E e) : 해당 인덱스의 객체 추가


E set(int index, E e) : 해당 인덱스 객체값 수정





boolean contain(Object o) : 해당 객체가 포함되어 있는지 여부


int size() : 저장된 객체 개수 리턴


E get(int index) : 해당 인덱스 값 가져오기


boolean isEmpty() : 비어있는지 검사




E remove(int index) : 해당 인덱스 객체 제거


boolean remove(Object o) : 인자로 받은 객체 제거 (앞에서부터 하나만)


void clear() : 리스트를 비움






+ Recent posts