Ch12-7~8. < >
0. 목차
Chapter12. 지네릭스, 열거형, 애너테이션
Ch12 - 7. Iterator< E >
Ch12 - 8. HashMap< K, V >
Ch12 - 7. Iterator< E >
▶ Iterator가 일반 클래스 였을 때
▷ Object 사용
public interface Iterator { // 지네릭스 안 보임
boolean hasNext();
Object next(); // Object 그대로 사용
void remove();
}
Iterator it = list.iterator(); // 일반 클래스 iterator()
while(it.hasNext()) {
Student s = (Student)it.next(); // 형변환, Object → Student
...
}
Student - it.next() = Student - Object = Student를 Object로 빼라! = 에러, 형변환 필요
▶ Iterator가 제네릭 클래스가 되었을 때
▷ 타입 변수 사용
public interface Iterator<E> { // 지네릭스有 → 지네릭 클래스
boolean hasNext();
E next(); // Object → 타입 변수 E 그대로 사용
void remove();
}
Iterator<Student> it = list.iterator(); // 위의 <E> 부분에 <Student>가 들어감
while(it.hasNext()) {
Student s = it.next(); // 형변환 필요 없음, Student → Student
...
}
Student - it.next() = Student - Student = Student를 Student로 빼라! = 문제X, 형변환 필요X
Ch12 - 8. HashMap< K, V >
▶ HashMap< K(key), V(value) >란?
▷ 여러 개의 타입 변수가 필요한 경우, 콤마(,)를 구분자로 선언
- HashMap class code
public class HashMap<K,V> extends AbstractMap<K,V> { ... } ... public V get(Object key) { ... } public V put(K key, V value) { ... } // 타입 변수 K(key), V<value> 사용 public V remove(Object key) { ... }
▷ 예시
- 참조변수< >와 생성자< >가 일치해야 함
HashMap<String, Student> map = new HashMap<String, Student>(); // 생성 map.put("자바왕", new Student("자바왕", 1, 1, 100, 100, 100)); // 데이터 저장
- 여기서
HashMap<String, Student> map
를 생성하면,
HashMap class에서K → String V → Student
로 변경
public class HashMap<String, Student> extends AbstractMap<String, Student> { ... } ... public Student get(Object key) { ... } public Student put(String key, Student value) { ... } public Student remove(Object key) { ... }
- get()을 활용하여 data를 꺼내보기 : 형변환 필요 없음
HashMap<String, Student> map = new HashMap<String, Student>(); // 제네릭스로 타입 변수 지정 Student s1 map.get("1-1"); // 형변환X
Student - map.get("1-1") = Student - Student = Student를 Student로 반환 = 형변환X
Student s1 (Student)map.get("1-1");