2022. 10. 13. 21:03ㆍJava 프로그램
오늘은 자바의 컬렉션 프레임 워크에 대해서 공부해 보겠습니다. 슬슬 자바 정리가 끝나가는 편인데
자바의 정리가 끝나면 데이터베이스 정리를 시작할 예정입니다.
컬렉션 프레임 워크
- 컬렉션: 사전적 의미로 요소(객체)를 수집해 저장해 놓은 것 입니다.
사용하는 이유
- 배열은 저장할 수 있는 객체 수가 배열을 생성할 때에 결정되기 때문에 불특정 다수의 객체를 저장하기에 여러 문제가 발생 할 수 있습니다. 이러한 배열의 문제를 해결하기 위해 사용합니다.
기본적인 컬렉션 프레임워크의 주요 인터페이스를 표를 통해 알아 보겠습니다.
인터페이스 분류 | 특징 | 구현 클래스 | |
컬렉션 | List | 1. 순서를 유지하고 저장 2. 중복 저장 가능 |
ArrayList, Vector, LinkedList |
Set | 1. 순서를 유지하지 않고 저장 2. 중복 저장 불가능 |
HashSet, TreeSet | |
Map | 1. 키와 값의 쌍으로 저장 2. 키는 중복 저장 불가능 |
HashMap, Hashtable, TreeMap, Properties |
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번 : 같은 방법으로 이제 객체를 삭제한 후 차이점을 콘솔 결과창에서 확인해 보겠습니다.
사실 첫번째 단락에서의 결과가 만약 Array 배열이었다면 이미 인덱스 2 번자리에 객체가 있기 때문에 원하는 결과가 달라졌을 것 입니다. 하지만 ArrayList를 사용했기 때문에 이미 들어가있는 객체가 있어도 밀려가며 들어간 것 입니다.
그 후 두번째 단락에서 remove() 를 사용하여 인덱스 2 번을 두번 삭제했습니다.
1. 처음 remove() 사용
- 먼저 흰둥이가 삭제됩니다.
2. 두번째 remove() 사용
- 흰둥이가 삭제 된 후 훈이가 2번으로 당겨지기 때문에 두번째 메소드 사용에서는 훈이가 삭제 됩니다.
그 후 맹구를 직접 기입 하여 객체를 삭제 했습니다.
마지막으로 출력을 하니 {흰둥이, 훈이, 맹구} 를 제외한 나머지 4개의 데이터가 출력 되는 것을 확인할 수 있습니다.
2) LinkedList
- 인접 참조를 링크하여 체인처럼 관리 합니다.
- 특정 인덱스에서 객체를 제거하거나 추가하게 되면 바로 앞뒤 링크만 변경 합니다.
- 빈번한 객체 삽입 및 삭제가 일어날 가능성이 있다면 ArrayList보다 좋은 성능을 가집니다. (작동 시간이 빠름)
- List<E> list = new LinkedList<E>();
List를 마무리 하고 2편에서 Set을 다루겠습니다! 👌
'Java 프로그램' 카테고리의 다른 글
IO기반 입출력(자바 마무리) (0) | 2022.11.21 |
---|---|
자바 Collection(컬렉션) 2편(Set 컬렉션) (0) | 2022.10.14 |
제네릭(Generic) 2편 마무리 (0) | 2022.10.12 |
제네릭(Generic) 1편[제네릭 기본] (0) | 2022.10.12 |
자바 기본 API 3편<마지막> (StringTokenizer~Date 클래스) (0) | 2022.10.12 |