자바 Collection(컬렉션) 1편(컬렉션 개념 및 List)

2022. 10. 13. 21:03Java 프로그램

728x90

오늘은 자바의 컬렉션 프레임 워크에 대해서 공부해 보겠습니다. 슬슬 자바 정리가 끝나가는 편인데

자바의 정리가 끝나면 데이터베이스 정리를 시작할 예정입니다.

 

컬렉션 프레임 워크

- 컬렉션: 사전적 의미로 요소(객체)를 수집해 저장해 놓은 것 입니다.

 

사용하는 이유

- 배열은 저장할 수 있는 객체 수가 배열을 생성할 때에 결정되기 때문에 불특정 다수의 객체를 저장하기에 여러 문제가 발생 할 수 있습니다. 이러한 배열의 문제를 해결하기 위해 사용합니다.

 

기본적인 컬렉션 프레임워크의 주요 인터페이스를 표를 통해 알아 보겠습니다.

인터페이스 분 특징 구현 클래스
컬렉션 List 1. 순서를 유지하고 저장
2. 중복 저장 가능
ArrayList, Vector, LinkedList
Set 1. 순서를 유지하지 않고 저장
2. 중복 저장 불가능
HashSet, TreeSet
Map 1. 키와 값의 쌍으로 저장
2. 키는 중복 저장 불가능
HashMap, Hashtable,
TreeMap, Properties

 

List

- 인덱스로 관리

- 중복해서 객체 저장 가능

 

List의 주요 메소드를 확인하 겠습니다.

List 컬렉션 주요 메소드

주요 메소드는 꼭 확인하고 몇가지는 확실하게 익히고 넘어가는 것이 좋을 것 같습니다.

그럼 구현 클래스를 사용해가며 연습해 보겠습니다.

1) ArrayList

- 저장 용량을 초과한 객체들이 들어오면 자동으로 자리가 늘어납니다.(물론 고정도 가능합니다)

- List<E> list = new ArrayList<E>();

public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		
		list.add("짱구");		//...1 시작
		list.add("맹구");
		list.add("훈이");
		list.add("유리");
		list.add("철수");
		list.add("수지");
		list.add(2, "흰둥이");		//...1 끝
		
		
		System.out.println("전체 갯수 : " +list.size()); //...2
		
		for(String s : list) {
			System.out.println(s);
		}	//...3
		
		System.out.println();
		
		list.remove(2);		//...4 시작
		list.remove(2);
		list.remove("맹구");	//...4 끝
		
		for(String s : list) {
			System.out.println(s);
		}	//...5
		
	}

List 객체를  ArrayList를 사용하여 생성 했습니다.( 저번 시간에 연습 한 제네릭도 함께 확인해주세요! 👍

1번 : 먼저 살펴본 주요 메소드 표에서 add 메소드를 통해 객체들을 짱구~수지 를 추가했습니다.

마지막은 인덱스와 함께 쓰는 메소드로 기입한 특정 인덱스에 객체를 삽입하는 메소드입니다.

 

2번 : 메소드 표에서 객체 검색 마지막에 있는 size() 메소드를 통해 저장되어 있는 객체 수를 리턴 받은 것 입니다.

 

3번 : 향상된 for문을 이용하여 저장된 객체들을 하나하나 출력했습니다.

 

4번 : 객체 삭제 기능을 가진 remove() 메소드를 사용했습니다. 인덱스 2번의 객체를 삭제했습니다.(두 번 삭제함)

그 후 객체를 직접 기입하여 맹구를 삭제 했습니다.

 

5번 : 같은 방법으로 이제 객체를 삭제한 후 차이점을 콘솔 결과창에서 확인해 보겠습니다.

ArrayList 예제 결과 확인

사실 첫번째 단락에서의 결과가 만약 Array 배열이었다면 이미 인덱스 2 번자리에 객체가 있기 때문에 원하는 결과가 달라졌을 것 입니다. 하지만 ArrayList를 사용했기 때문에 이미 들어가있는 객체가 있어도 밀려가며 들어간 것 입니다.

 

그 후 두번째 단락에서 remove() 를 사용하여 인덱스 2 번을 두번 삭제했습니다.

1. 처음 remove() 사용

- 먼저 흰둥이가 삭제됩니다.

2. 두번째 remove() 사용

- 흰둥이가 삭제 된 후 훈이가 2번으로 당겨지기 때문에 두번째 메소드 사용에서는 훈이가 삭제 됩니다.

 

그 후 맹구를 직접 기입 하여 객체를 삭제 했습니다.

마지막으로 출력을 하니 {흰둥이, 훈이, 맹구} 를 제외한 나머지 4개의 데이터가 출력 되는 것을 확인할 수 있습니다.

 

2) LinkedList

- 인접 참조를 링크하여 체인처럼 관리 합니다.

- 특정 인덱스에서 객체를 제거하거나 추가하게 되면 바로 앞뒤 링크만 변경 합니다.

- 빈번한 객체 삽입 및 삭제가 일어날 가능성이 있다면 ArrayList보다 좋은 성능을 가집니다. (작동 시간이 빠름)

- List<E> list = new LinkedList<E>();

 

List를 마무리 하고 2편에서 Set을 다루겠습니다! 👌

 

반응형