컬렉션 프레임 워크
- 자바에서 자료구조를 사용해서 객체들을 효율적으로 추가, 검색, 삭제 할수 있도록
인터페이스와 구현 클래스를 java.util 패키지에서 제공하는데 이들을 컬렉션 프레임워크라고 부릅니다. - 컬렉션은 객체의 저장, 프레임워크는 사용 방법을 정해놓은 라이브러리를 말합니다.
- 컬렉션 프레임 워크의 주요 인터페이스로는 List, Set, Map이 있습니다.
List 컬렉션
- 배열과 비슷하게 객체를 인덱스로 관리합니다.
- 배열과의 차이점은 저장 용량이 자동으로 증가하고 객체를 저장할때 자동으로 인덱스가 부여됩니다.
- List 컬렉션은 객체 자체를 저장하는 것이 아니라 객체의 번지를 참조합니다.
- List 컬렉션에는 ArrayList, Vector, LinkedList 등이 있습니다.
List 컬렉션에서 공통적으로 사용가능한 List 인터페이스 메소드
- E 라는 타입 파라미터는 저장되는 객체의 타입을 List 컬렉션을 생성할 때 결정하라는 뜻입니다.
- 예시로 아래 코드와 같이 변수를 선언하였을때 List 컬렉션에 저장되는 객체를 String 타입으로 하겠다는 뜻이고
E 타입 파라미터는 String 타입이 됩니다.
List<String> list = ...;
기능 | 메소드 | 설명 |
객체 추가 | boolean add(E e) | 주어진 객체를 맨 끝에 추가 |
void add(int index,E element) | 주어딘 인덱스에 객체를 추가 | |
E set(int index, E element) | 주어진 인덱스에 저장된 객체를 주어진 객체로 변경 |
|
객체 검색 | boolean contains(Object o) | 주어진 객체가 저장되어 있는지 조사 |
E get(int index) | 주어진 인덱스에 저장된 객체를 리턴 | |
boolean isEmpty() | 컬렉션이 비어 있는지 조사 | |
int size() | 저장되어 있는 전테 객체 수 리턴 | |
객체 삭제 | void clear() | 저장된 모든 객체 삭제 |
E remove(int index) | 주어진 인덱스에 저장된 객체 삭제 | |
boolean remove(Object o) | 주어진 객체 삭제 |
ArrayList
- ArrayList는 List 인터페이스의 대표적인 구현 클래스입니다.
- 내부에 10개의 객체를 저장할 수 있는 초기 용량을 가지게 됩니다.
- ArrayList를 생성하기 위해서는 저장할 객체타입을 E 파라미터 자리에 표기하고 기본 생성자를 호출하면 됩니다.
- 빈번한 객체 삭제 혹은 삽입이 일어나는곳에는 사용하지 않는 것이 좋습니다.
(한개가 제거되면 뒤 인덱스들이 당겨지기 때문입니다.)
List<E> list = new ArrayList<E>();
List<String> list = new ArrayList<String>();
예시 코드)
package sec15.exam01;
import java.util.*;
public class ArrayListExample {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("Hi");
list.add("Hello");
int size = list.size();
list.remove(0);
list.add(1, "Java");
System.out.println("총 갯수: " + size);
for(int i = 0; i < list.size(); i++) {
String str = list.get(i);
System.out.println(str);
}
}
}
Vector
- ArrayList와 동일한 내부구조를 가지고 있습니다.
- Vetor는 동기화된 메소드로 구성되어 있기 때문에 멀티스레드가 동시에 Vetor의 메소드들을 실행 할수 없고,
하나의 스레드가 메서드를 실행을 완료 해야만 다른 스레드가 메소드를 실행할수 있습니다.
List<E> list = new Vector<E>();
VectorExample.java 파일
package sec15.exam01;
import java.util.*;
public class VectorExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Board> list = new Vector<Board>();
list.add(new Board("제목1", "언어1", "저자1"));
list.add(new Board("제목2", "언어2", "저자2"));
list.add(new Board("제목3", "언어3", "저자3"));
list.add(new Board("제목4", "언어4", "저자4"));
list.remove(0);
list.remove(2);
for(int i=0; i<list.size(); i++) {
Board board = list.get(i);
System.out.println(board.subject + "," + board.lan + "," + board.writer);
}
}
}
Board.java 파일
package sec15.exam01;
public class Board {
String subject;
String lan;
String writer;
public Board(String subject, String lan, String writer) {
this.subject = subject;
this.lan = lan;
this.writer = writer;
}
}
주의할점으로 remove(0) 에서 제목 1부분이 사라지고 제목 2부분이 당겨집니다.
따라서 remove(2)를 하게 될경우 제목3 부분이 안사라지고 제목4 부분이 사라집니다.
LinkedList
- ArrayList 와 사용방법은 똑같지만 내부구조는 다릅니다.
- LinkedList에서 특정 인덱스의 객체를 제거하면 앞뒤 링크만 변경되고 나머지 링크는 변경되지 않습니다.
- 특정 인덱스에 객체를 삽입할 때에도 마찬가지입니다.
- ArrayList보다 순차적으로 추가나 삭제, 검색은 느리지만 중간에 추가하거나 삭제하는것은 빠릅니다.
List<E> list = new LinkedList<E>();
'학습단 > JAVA 학습단' 카테고리의 다른 글
19. 혼공자 19일차(컬렉션 프레임 워크_3) (0) | 2023.08.09 |
---|---|
18. 혼공자 18일차(컬렉션 프레임 워크_2) (0) | 2023.08.08 |
4주차 완료 (0) | 2023.07.28 |
16. 혼공자 16일차(스레드 제어) (0) | 2023.07.27 |
15. 혼공자 15일차(멀티 스레드) (0) | 2023.07.24 |