본문 바로가기
java

Generics 03 Iterator, HashMap과 제네릭스

by 킹차니 2022. 1. 3.

Iterator, Hashmap과 제네릭스

iterator, HashMap을 보면서 제네릭스와 더 친해져 보자!

 

 

 

 

Iterator<E>

-클래스를 작성할 때, Object타입 대신 T와 같은 타입 변수를 사용

public interface Iterator{
	boolean hashNext();
	Object next();
	void remove();
}

//아래와 같이 바뀌었다.

public interface Iterator<E>{
	boolean hashNext();
	E next();
	void remove();
}
Iterator it = list.iterator();
while(it.hasNext()){
	Student s = (Student)it.next();
	...
}

//제네릭스가 도입되면서 아래와 같이 형변환을 해줄 필요가 없어짐

Iterator<Student> it = list.iterator();
while(it.hasNext()){
	Student s = it.next(); // 타입 캐스팅 안해도 된다!
	...
}

EX)

import java.util.ArrayList;
import java.util.Iterator;

public class EX03 {
    public static void main(String[] args) {
        ArrayList<Student> list = new ArrayList<>();
        list.add(new Student("자바왕", 1, 1));
        list.add(new Student("자바짱", 1, 2));
        list.add(new Student("자바킹", 2, 1));

        Iterator<Student> it = list.iterator();
//        Iterator it2 = list.iterator(); // 타입을 지정해주지 않으면 아래에서 형변환 해줘야함
        while (it.hasNext())
            System.out.println(it.next());
    }
}

실행결과:
Student{name='자바왕', no=1, ban=1}
Student{name='자바짱', no=1, ban=2}
Student{name='자바킹', no=2, ban=1}

 

 

HashMap<K,V>

-여러 개의 타입 변수가 필요한 경우, 콤마(,)를 구분자로 선언

//HashMap<K, V>
public class HashMap<K,V> extends AbstractMap<K, V>{
	...
	public V get(Object key){...}
	public V put(K key, V value){...}
	public V remove(Object key){...}
	...
}

//아래와 같이 생성하면
HashMap<String, Student> map = new HashMap<String, Student>(); //생성

//HashMap은 아래와 같이 된다.
public class HashMap<String,Student> extends AbstractMap<String, Student>{
	...
	public Student get(String key){...}
	public Student put(String key, Student value){...}
	public Student remove(String key){...}
	...
}

map.put("자바왕", new Student("자바왕", 1, 1, 100, 100, 100));//데이터 저장

EX)

import java.util.HashMap;

public class EX04 {
    public static void main(String[] args) {
        HashMap<String, Student> map = new HashMap<>();
        map.put("자바왕", new Student("자바왕", 1, 1));
        map.put("자바짱",new Student("자바짱", 1, 2));
        map.put("자바킹",new Student("자바킹", 2, 1));

        Student s = map.get("자바왕");
        System.out.println(s); // Student{name='자바왕', no=1, ban=1}
    }
}

 

 

 

출처: 남궁성님 유튜브 강의
https://www.youtube.com/user/MasterNKS