JAVA :: 제네릭 컬렉션

smi·2021년 2월 2일
0

JAVA (자바)

목록 보기
14/62
post-thumbnail

💡 Vector<E>

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

🔎 특징

삽입되는 요소의 개수에 따라 자동으로 크기를 조절한다.
요소의 삽입과 삭제에 따라 자동으로 요소들의 자리를 이동한다.

🔎 벡터 생성

E 의 요소로 사용할 클래스 타입반드시 지정해야 한다.
벡터의 용량을 설정할 수 있다.

⚠ 컬렉션은 자신의 용량을 스스로 조절하기 때문에 굳이 넣을 필요는 없다.

Vector<Integer> v = new Vector<Integer>(5); // 초기 용량이 5인 정수만 사용 가능한 벡터

🔎 클래스의 주요 메소드

  • add() : 벡터에 요소 삽입
    ⚠ v.size()보다 큰 곳에 삽입 불가능.
    • 예시
v.add(new Integer(5)); 
v.add(5); // 자동 박싱
v.add("5"); // 오류. 정수만 입력 가능
v.add(null); // 벡터에 null도 삽입할 수 있음.
v.add(2, 5); // 중간에 삽입 가능. 인덱스 2에 정수 5 삽입. 
// 기존의 2와 그 이후에 있던 인덱스의 요소들은 모두 한 자리씩 이동. 
  • get(), elementAt() : 벡터 내의 요소 알아내기
    • 예시
Integer obj = v.get(0); // 벡터의 인덱스 1의 위치에 있는 요소를 얻어냄.
int i = obj.intValue(); // obj에 있는 정수를 알아냄. 이 값은 5

int i = v.get(0); // 자동 언박싱
  • size(), capacity() : 벡터의 크기와 용량 알아내기
    • 예시
int len = v.size(); // 벡터의 크기(벡터에 존재하는 요소의 수)
int cap = v.capacity(); // 벡터의 용량
  • remove() : 벡터의 요소 삭제
    ⚠ 요소 객체가 없는 곳에 삭제할 시 오류.
    • 예시
v.remove(1); // 인덱스 1의 위치에 있는 요소 삭제
// 뒤에 있는 요소들은 한 자리씩 앞으로 이동.

Integer m = new Integer(100);
v.add(m);
...
v.remove(m); //레퍼런스 m의 요소 삭제


💡 ArrayList<E>

가변 크기의 배열을 구현한 컬렉션으로서 Vector 클래스와 거의 동일하다.

🔎 특징

스레드 간의 동기화를 지원하지 않기 때문에, 다수의 스레드가 동시에 ArrayList에 요소를 삽입하거나 삭제할 때 충돌이 발생할 소지가 있다.
때문에, ArrayList를 이용하려면 멀티스레드의 동기화를 사용자가 직접 구현해야 한다.

🔎 클래스의 주요 메소드



💡 HashMap<K, V>

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

🔎 특징

해시 함수를 통해 '키'와 '값'이 저장되는 위치를 결정하므로, 삽입되는 순서와 들어 있는 위치관계가 없다.
인덱스를 이용하여 요소를 접근할 수 없고 오직 '키'로 검색해야 한다.
자동으로 크기를 조절한다.

🔎 해시맵 생성

K와 V으로 사용할 구체적인 타입을 지정하여 생성

HashMap<String, String> h = new HashMap<String, String>(); // 스트링타입의 해시맵을 생성

🔎 클래스의 주요 메소드

  • put() : 해시맵에 요소 삽입
    • 예시
h.put("baby","아기"); // "baby"가 키고, "아기"는 값이다.
h.put("husband","남편");
  • get() : '키'로 '값' 읽기
    ⚠ 키를 전달한다.
    • 예시
String string1 = h.get("baby"); // string1 = "아기"
String string2 = h.get("husband"); // string2 = "남편"
String string3 = h.get("man"); // man는 h에 없는 키이므로 null을 리턴. string3 = null
  • remove() : '키'로 요소 삭제
    • 예시
h.remove("pencil"); // put("pencil", "연필")로 삽입한 요소 삭제
  • size() : 요소 개수 알아내기
    ⚠ 삽입한 순서로 저장하지 않기 때문에, 삽입한 순서로 알아낼 수 없다.
    • 예시
int n = h.size(); //현재 h 내에 있는 요소의 개수 리턴
  • keySet() : 해시맵의 전체 검색, 해시맵에 있는 전체 요소를 알아낼 수 있다.
    • 예시
Set<String> keys = h.keySet(); // h에 있는 모든 키를 Set 컬렉션으로 리턴
Iterator<String> it = keys.iterator(); // 문자열을 검색할 수 있는 Iterator 리턴
while(it.hasNext()) {
    String key = it.next(); // 키 
    String value = h.get(key); // 값
    System.out.println("("+key+","+value+")"); // 키와 값의 쌍 출력
}
  • 결과
(baby,아기)
(husband,남편)


💡 Iterator<E>

Vector, ArrayList, LinkedList, Set 컬렉션에서 순차적으로 요소를 검색할 때 쓰인다.

🔎 특징

Iterator을 사용할 때, E 에 컬렉션의 매개 변수동일한 타입을 설정해야 한다.

🔎 인터페이스의 주요 메소드

  • 예시
Vector<Integer> v = new Vector<Integer>(); 
Iterator<Integer> it = v.iterator(); // 벡터 v의 iterator()메소드를 호출
// 벡터 v의 요소를 순차 검색할 Iterator 객체 리턴

while(it.hasNext()) { // it로 벡터의 끝까지 반복
   int n = it.next(); //요소 리턴. 
   ....
}
profile
공부한 거 올려요 :)

0개의 댓글