본문 바로가기
JAVA

JAVA - 컬렉션(Collection)과 제네릭(Generics)

by whitedeveloper 2022. 12. 22.

#.컬렉션(Collection)

-배열이 가진 고정 크기의 단점을 극복하기 위해 객체들을 쉽게 삽입, 삭제, 검색할 수 있는 가변 크기의 컨테이너

-안드로이드를 비롯한 자바 프로그램을 작성하는데 빼놓을 수 없는 도구

-제네릭이라는 기법으로 구현

 

#.컬렉션을 위한 자바 인터페이스와 클래스

-java.util 패키지가 다양한 컬렉션 인터페이스와 클래스 제공

-컬렉션 클래스(Collection<E>)는 개발자가 바로 사용할 수 있는 클래스

 > Vector<E>와 ArrayList<E> - 가변 크기의 배열을 구현

 > LinkedList<E> - 노드들이 링크로 연결되는 리스트를 구현

 >Stack<E> - 스택을 구현

 > HashSet<E> - 집합을 구현

 ->Collection<E>를 상속 받고, 단일 클래스의 객체만을 요소로 다룸

 

>HashMap<K, V>는 K(key)와 V(value)의 쌍으로 이루어지는 데이터를 저장, 키로 검색하는 컬렉션

 

#.컬렉션 특징

- 제네릭이라는 기법으로 만들어짐

- <E>,<K>,<V> 등이 항상 포함 = 타입 매개

-변수

 >E 대신 Integer,String같은 구체적인 타입을 지정 = 특정타입만을 다루지 않고 여러 종류 타임으로 변신 가능

 > 일반화 시킨 타입 혹은 제네릭 타입이라고 부름

 

-컬레션 요소는 객체들만 가능

 > int, char, double 등의 기본타입의 데이터는 원칙적으로 컬렉션 요소로 불가능

ex) Vector<int> V = new Vector<int>(); //컴파일 오류

       Vector<Integer> V = new Vector<Integer>(); //정상

 

#.제네릭의 기본 개념

-모든 종류의 타입을 다룰 수 있도록, 클래스나 메소드를 타입 매개변수를 이용하여 선언하는 기법

-클래스  코드를 찍어내듯이 생산할 수 있도록 일반화(generic)시키는 도구

-Stack<E>의 E에 국체적인 타입을 지정하면, 지정된 타입만 다룰 수 있는 구체화된 스택이 됨

 

#.iterator

-컬렉션 순차 검색을 위해 사용

 

-Iterator<E>의 메소드

 > boolean hashNext();

 > E next();

 > void remove();

 

ex)

Vector<Integer> V = new Vector<Integer>();

Iterator<Integer> if = v.Iterator(); //Iterator객체 리턴

 

int n = it.next(); //요소 리턴

결과 

5

4

100

-1

벡터에 있는 정수 합 : 108

 

#.Collections 클래스 활용

- sort() - 컬렉션 요소들의 정렬

- reverse() - 반대 순으로 정렬

- max(), min() 최댓값과 최솟값 찾아내기

- binarySearch() 이진 검색

 

*컬렉션 클래스의 메소드는 모두 static 타입임으로 객체 생성할 필요없다.

결과

메트릭스->스타워즈->아바타->터미네이터->트랜스포머

트랜스포머->터미네이터->아바타->스타워즈->매트릭스

아바타는 3번째 요소입니다.

'JAVA' 카테고리의 다른 글

[Code]substring(), lastIndexOf()  (0) 2023.06.01
[JAVA]Optional  (0) 2023.01.12
JAVA - 인터페이스와 추상클래스 비교  (0) 2022.12.20
JAVA - 인터페이스  (0) 2022.12.20
JAVA - 추상클래스  (0) 2022.12.19