본문 바로가기
2-1 학기/OOP

[JAVA] 컬렉션과 제네릭

by bona.com 2023. 5. 31.

컬렉션

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

 

특징

  • 컬렉션은 제네릭이라는 기법으로 만들어졌다.
  • 컬렉션의 요소는 객체들만 가능하다.

 

Vector<E>

배열을 가변 크기로 다룰 수 있게 하고, 객체의 삽입, 삭제, 이동이 쉽도록 구성한 컬렉션 클래스이다.

 

  • 벡터를 생성할 때, Vector<E>의 E에 요소로 사용할 타입을 지정해야 한다.
Vector<Integer> v = new Vector<Integer>();
  • 문자열만 다루는 벡터는 다음과 같이 생성할 수 있다.
Vector<String> stringVector;
stringVector = new Vector<String>();
  • add() 메소드를 이용하면 벡터의 끝이나 중간에 요소를 삽입할 수 있다.
v.add(Integer.valueOf(5));
v.add(5); // 5 -> new Integer(5)로 자동 박싱됨
v.add(null); // null도 삽입 가능!
v.add(2,100); // 인덱스 2의 위치에 정수 100 삽입

위의 코드는 인덱스 2의 위치에서 정수 100을 삽입하고 기존의 인덱스 2와 그 뒤에 있는 요소들을 모두 한 자리씩 뒤로 이동시킨다.

!! v.size()보다 큰 곳에 삽입 불가능하다. !!

  • 벡터 내의 요소 알아내기
int i = v.get(1); //자동 언박싱
  • 벡터의 크기: 벡터에 들어있는 요소의 개수
  • 벡터의 용량: 수용할 수 있는 크기
  • 벡터의 요소 삭제
v.remove(1);

위의 코드는 인덱스 1에 위치하는 요소를 삭제한다. 코드의 실행 결과 뒤에 있는 요소들이 한 자리씩 앞으로 이동한다.

 

컬렉션의 순차 검색을 위한 Iterator

Vector<Integer> = new Vector<Integer>();
Iterator<Integer> it = v.iterator();
while(it.hasNext()){
	int n = it.next();
    ...
}

 

HashMap<K, V>

HashMap<K, V> 컬렉션은 경로명이 java.util.HashMap이며, '키(key)'와 '값(value)' 의 쌍으로 구성되는 요소를 다룬다.

K는 '키'로 사용할 데이터 타입을, V는 '값'으로 사용할 데이터 타입의 타입매개변수이다.

HashMap<String, String> h = new HashMap<String, String>();
h.put("apple", "사과");
String kor = h.get("apple");

해시맵은 해시 함수를 통해 '키'와 '값'이 저장되는 위치를 결정하므로, 사용자는 그 위치를 알 수 없고, 삽입되는 순서와 들어 있는 위치 또한 관계가 없다.

 

<장단점>

  1. 요소의 삽입, 삭제 시간이 매우 빠르다.
  2. 요소 검색은 더욱 빠르다.
  3. 해시맵은 인덱스를 이용하여 요소에 접근할 수 없고, 오직 '키'로만 검색해야 한다.
  • 해시맵 요소 삽입
h.put("baby", "아기");
  • '키'로 '값' 읽기
String kor1 = h.get("baby");

해시맵에 없는 '키'로 get()을 호출하면 null을 리턴한다.

  • '키'로 요소 삭제
h.remove("baby");
  • 요소 개수 알아내기
int n = h.size();

 

'2-1 학기 > OOP' 카테고리의 다른 글

[JAVA] String 클래스  (0) 2023.05.31
[JAVA] Wrapper 클래스  (0) 2023.05.31
[JAVA] Object 클래스  (0) 2023.05.31
[JAVA] 메소드 오버라이딩(Method Overriding)  (0) 2023.05.30
[JAVA] 업캐스팅과 instanceof 연산자  (0) 2023.05.23