07. 컬렉션과 제네릭

PearLine_Zero·2023년 12월 27일

Java

목록 보기
7/7
post-thumbnail

7.1 컬렉션과 제네릭 개념

컬렉션이란 안드로이드를 비롯한 자바 프로그램을 작성하는데 빼놓을 수 없는 중요한 도구.
컬렉션은 제네릭이라는 기법으로 구현되어 있기 때문에 제네릭에 대한 공부도 필요함.
컬렉션은 고정 크기의 배열이 가지는 단점을 극복하고, 요소라고 불리는 객체들의 사입 , 삭제 검색 기능을 갖춘 가변 크기의 컨테이너임.

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

  • Vector와 ArrrayList는 가변 크기의 배열을 구현.
  • Stack는 스택구현.
  • HashSet은 집합을 구현.
    이들은 Collection를 상속받으며, 단일 클래스의 원소 객체를 삽입 삭제하는 공통점이 있음. 이와 달리 HashMap< K, V>는 '키(K) 와 값(v)'의 쌍으로 이루어지는 데이터를 저장하고 검색하는 컬렉션.

✅ 컬렉션의 특징

첫째 제네릭이라는 기법으로 구현으로 클래스나 인터페이스의 이름은 < E >,< K >,< V >등으로 항상 포함. 이들은 타입 매개 변수라고하며 컬렉션 요소를 일반화 시킨타입. 그러므로 Vector<E>에서 E 대신 Integer나 String으로 구체적인 타입을 지정하여 사용.
둘째 컬렉션 요소는 객체만 가능 int , char, double 기본 타입의 데이터는 기본적으로 컬렉션 요소로 불가능.

✅ 제네릭의 기본 개념

  • 제네릭은 모든 종류의 타입을 다룰 수 있도록, 클래스나 메소드를 일반화된 타입 매개 변수를 이용하여 선언하는 기법.
  • C++ 템플릿과 동일. 템플릿이란 형판이란 뜻으로 본 떠 찍어내기 위해 만들어진 틀

✅ 제네릭 타입 매개 변수

  • E : Element를 의미하여 컬렉션에서 요소를 표시할 때 사용
  • T : type을 의미
  • V : Value를 의미
  • K : key를 의미

7.2 제네릭 컬렉션 활용

✅ Vector< E >

배열을 가변 크기로 다룰 수 있게 하고, 객체의 삽입, 삭제, 이동이 쉽도록 구성한 컬렉션 클래스. 벡터는 삽입되는 요소의 개수에 따라 자동으로 크기를 조절하고, 요소의 사입과 삭제 따라 자동으로 요소들의 자리를 이동.

👉 백터생성

백터를 생성할 때, vector< E >에 요소로 사용할 클래스 타입을 지정.

Vector<Integer> v = new Vector<Integer>():

👉 백터 요소 삽입

add()메소드를 이용하면 벡터의 끝이나 중간에 요소를 삽입 가능.

v.add(Integer.valueof(5));

👉 백터 내의 요소 알아내기

백터 내의 존재하는 요소를 알아내기 위해서는 get(), elementAT() 메소드를 이용함.

Integer obj = v.get(1);
int i - obj.intValue();

👉 백터의 크기와 용량 알아내기

백터의 크기란 백터에 들어 있는 요소의 개수를 말하며 size()메소드를 이용하고, 용량이란 벡터가 수용할 수 있는 현재 크기를 말하며 capacity()를 이용함.

int len = v.size();
int cap = v.capacity();

👉 백터에서 요소 삭제

백터 내의 임이의 인덱스에 있는 요소를 삭제가능 remove()메소드 이용

v.remove(1);

✅ ArrayList< E >

가변 크기의 배열을 구현한 컬렉션으로서 vector클래스와 거의 동일하다. 크게 다른점은 스레드 간의 동기화를 지원하지 않기 때문에, 다수의 스레드가 동시에 ArrayList에 요소를 삽입하거나 삭제할 때 충돌이 발생할 소지가 있음.

✅ 컬렉션의 순차 검색을 위한 lterator

순차적으로 요소를 검색할 때 Iterator< E > 인터페이스를 사용하면 편리하며 사용할 때는 컬렉션 매개 변수와 동일한 타입을 설정.

  Iterator<Integer> it = v.iterator();

✅ HashMap < K, V >

컬렉션은 키와 값의 쌍으로 구성된 요소로 K는 키로 사용할 데이터 타입 V는 값으로 사용할 데이터 타입
키와 값을 저장하는 자료 구조를 가지고 put() , get() 메소드를 이용하여 요소를 삽입하거나 검색함.
인덱스를 이용하여 요소를 접근할 수 없고 오직 로 검색해야 함.

👉 해시맵 생성

해시맵은 K에 '키'로 v에는 '값'으로 사용할 구체적인 타입을 지정하여 생성

HashMap<String, String> h = new HashMap<String, String>();

👉 해시맵에 요소 삽입

put() 메소드에 '키', '값'을 인자로 전달

h.put("baby","아기");
h.put("apple","사과"):

👉 '키'로'값'읽기

get()메소드에 '키'를 전달하면, '값'을 얻을 수 있으며 '값'은 문자열임.

String kor1 = h.get("baby"); // kor1 = "아기"

👉 '키'로 요소 삭제

remove() 요소 삭제시 이용

h.remove("apple");

👉 요소 개수 알아내기

size()메소드 호출

int n = h.size(); // 현재 h 내에 있는 요소의 개수 리턴

👉 해시맵 전체 검색

HashMap의 keyset()메소드는 모든 키를 Set컬렉션 객체로 만들어 리턴함.

Set<String> keys = h.keyset(); // 해시맵에 h에 있는 모든 키를 Set 컬렉션으로 리턴
Iterator<String> it = keys.iterator(); // Set에서 문자열을 검색할 수 있는 Iterator 리턴
profile
https://baesaa0304.tistory.com 블로그 이사합니다~

0개의 댓글