Java
제네릭과 컬렉션
데분몽굴
2024. 1. 26. 17:34
컬렉션의 개념
컬렉션(collection)은 배열이 가진 고정 크기의 단점을 극복하기 위해 객체들을 쉽게 삽입, 삭제, 검색할 수 있는 가변 크기의 컨테이너이다.
컬렉션 클래스는 개발자가 바로 사용할 수 있는 것들로서, Vector<E>와 ArrayList<E>는 가변 크기의 배열을 구현합니다.
제네릭의 기본 개념
제네릭(generic)은 모는 종류의 타입을 다룰 수 있도록, 클래스나 메소드를 타입 매개변수를 이용하여 선언하는 기법
제네릭 컬렉션 활용
Vector<E>
- vector<E>는 배열을 가변 크기롤 다룰 수 있게 하고, 객체의 삽입, 삭제, 이동이 쉽도록 구성한 컬렉션 클래스이다.
정수만 다루는 벡터를 생성하고 , 활용하는 기본 사례
import java.util.Vector;
public class VectorEx {
public static void main(String[] args) {
Vector<Integer> v = new Vector<Integer>(); // 정수 값만 다루는 벡터 생성
v.add(5);
v.add(4);
v.add(-1);
// 벡터 중간에 삽입하기
v.add(2, 100);
System.out.println("벡터 내의 요소 개수 : " + v.size());
System.out.println("벡터의 현재용량: " + v.capacity());
// 모든 요소 출력하기
for(int i=0;i<v.size();i++){
System.out.println(v.get(i));
}
// 벡터 속의 모든 정수 더하기
int sum = 0;
for(int i=0;i<v.size();i++){
int n=v.elementAt(i);
sum += n;
}
System.out.println("벡터에 있는 정수 합: " + sum);
}
}
-- 실행결과--
벡터 내의 요소 개수 : 4
벡터의 현재용량: 10
5
4
100
-1
벡터에 있는 정수 합: 108
ArrayList<E>
ArrayList는 스레드 간에 동기화를 지원하지 않기 때문에, 다수의 스레드가 동시에 ArrayList에 요소를 삽입하거나 삭제할 때 ArrayList의 데이터가 훼손될 우려가 있다. 하지만 멀티스레드 동기화를 위한 시간 소모가 없기 때문에, ArrayList는 Vector보다 속도가 빨라, 단일 스레드 응용에는 더 효과적이다.
ArrayList의 생성
ArrayList<String> a = new ArrayList<String>();
// Java 10부터 가능
var a = new ArrayList<String>();