본문 바로가기

Java

[Java] Iterator<E>, Map<K, V>

Iterator<E>

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

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

public interface Iterator<E> {
    boolean hasNext();
    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;

 

예제

public class Ex4 {

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

        Iterator<Student> it = list.iterator();
        while (it.hasNext()) {
            //Student s = it.next();
            //Student s = (Student) it.next(); // 지네릭스를 사용하지 않으면 형변환 필요
            //System.out.println(s.name);
            System.out.println(it.next().name);
        }
    }
}

class Student {
    String name = "";
    int ban;
    int no;

    Student(String name, int ban, int no) {
        this.name = name;
        this.ban = ban;
        this.no = no;
    }
}

 

 

HashMap<K, V>

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

HashMap<String, Student> map = new HashMap<String, Student>(); // 생성
map.put("자바왕", new Student("자바왕", 1, 1, 100, 100, 100)); // 데이터 저장

public class HashMap<K, V> extends AbstactMap<K, V> { // 일부 생략
    public V get(Object key) { }
    public V put(K key, V value) { }
    public V remove(Object key) { }
    ...
}

 

public class HashMap extends AbstactMap { // 일부 생략
    public Student get(Object key) { }
    public Student put(String key, Student value) { }
    public Student remove(Object key) { }
    ...
}
Student s1 = (Student)s1.get("1-1"); // 변경 전
Student s1 = s1.get("1-1"); // 변경 후

 

 

예제

public class Ex5 {

    public static void main(String[] args) {
        HashMap<String, Student> map = new HashMap(); // JDK 1.7 버전부터 생성자에 타입지정 생략가능
        map.put("자바왕", new Student("자바왕", 1, 1, 100, 100, 100));
        map.put("킹자바", new Student("킹자바", 1, 1, 1, 1, 1));
        map.put("킹자바", new Student("킹자바", 1, 1, 1, 1, 1));

        //Student s = (Student) map.get("자바왕");
        //Student s = map.get("자바왕");
        //System.out.println(s.name);
        System.out.println(map.get("자바왕").name); // 한줄로 가능해짐
        System.out.println(map.get("자바왕").kor); // 한줄로 가능해짐

    }

    static class Student {
        String name = "";
        int ban;
        int no;
        int kor;
        int eng;
        int math;

        Student(String name, int ban, int no, int kor, int eng, int math) {
            this.name = name;
            this.ban = ban;
            this.no = no;
            this.kor = kor;
            this.eng = eng;
            this.math = math;
        }
    }
}

'Java' 카테고리의 다른 글

[Java] 와일드 카드, 지네릭 메서드  (0) 2024.05.10
[Java] 지네릭 클래스의 제약  (0) 2024.05.10
[Java] 지네릭스란?  (0) 2024.05.09
[Java] Collections 컬렉션을 위한 메서드  (0) 2024.05.08
[Java] HashMap 키와 값  (0) 2024.05.08