Iterator<E>
<T>
같은 타입변수 사용public interface Iterator<E>{ boolean hasNext(); E next(); //<- Object next(); void remove(); }
형변환이 필요 없어짐!!
Iterator<Student> it = list.iterator();
while(it.hasNext()){
Student s = it.next(); //it.next() 의 반환타입 == Student
...
}
ex12_02
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 it = list.iterator(); while(it.hasNext()){ System.out.println(((Student)it.next()).name); //또는 Student s = (Student)it.next(); System.out.println(s.name); }
it.next()
의 반환타입 == Object
(Student)
형변환 필수!!!Iterator<E>
지네릭클래스)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()){ System.out.println(it.next().name); //또는 Student s = it.next(); System.out.println(s.name); }
it.next()
의 반환타입 == Student
ex12_02
import java.util.ArrayList;
import java.util.Iterator;
public class Ex12_02 {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<Student>();
// ArrayList 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 it = list.iterator();
while(it.hasNext()) {
Student s = it.next();
System.out.println(st.ban+"반 "+st.no+"번 "+st.name);
// System.out.println(((Student)it.next()).name);
//왜?? it.next()의 필드는 Object니까 형변환이 필요하다!!
}
}
}
class Student{
String name = "";
int ban;
int no;
Student(String name, int ban, int no){
this.name = name;
this.ban = ban;
this.no = no;
}
}
1반 1번 자바왕
1반 2번 자바짱
2반 1번 홍길동
HashMap<K,V>
public class HashMap<K,V> extends AbstractMap{ ... ... public V get(Object key) {..} public V put(K key, V value) {..} public V remove(Object key) {..} ... }
- 반환타입이 V로 되므로 형변환이 필요없다!!
ex12_02R
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class Ex12_02R {
public static void main(String[] args) {
HashMap<String, Student2> map = new HashMap<>(); //생략가능
map.put("자바왕", new Student2("2학년", 2, 2, 90, 100, 80));
map.put("홍길동", new Student2("1학년", 1, 1, 80, 90, 100));
//map
System.out.println(map);
//***public Value get(Object key)
Student2 s = map.get("자바왕"); //*** 형변환 필요없다!!
System.out.println(s);
System.out.println("정보: "+s.name+","+s.ban+","+s.ko);
Student2 s2 = map.get("홍길동");
System.out.println(s2);
System.out.println("정보: "+s2.name+","+s2.no+","+s2.math);
System.out.println("===이전 방식+지네릭스===");
//**이전에 했던 방식+지네릭스 첨가
//이건 아마 value가 하나일 때 유용할 것 같은데 흠
Set<Entry<String, Student2>> set = map.entrySet();
System.out.println(set);
Iterator<Entry<String, Student2>> it = set.iterator();
while(it.hasNext()) {
Map.Entry<String, Student2> e = (Map.Entry<String, Student2>)it.next();
System.out.println("이름: "+e.getKey()+", 정보: "+e.getValue());
}
//**key들만
Set<String> set2 = map.keySet();
System.out.println("이름명단: "+set2);
//value들만인데 음..
Collection<Student2> c = map.values();
System.out.println("정보: "+c);
}
}
class Student2{
String name = "";
int ban;
int no;
int ko;
int eng;
int math;
public Student2(String name, int ban, int no, int ko, int eng, int math) {
this.name = name;
this.ban = ban;
this.no = no;
this.ko = ko;
this.eng = eng;
this.math = math;
}
}
{홍길동=Student2@24d46ca6, 자바왕=Student2@4517d9a3}
Student2@4517d9a3
정보: 2학년,2,90
Student2@24d46ca6
정보: 1학년,1,100
===이전 방식+지네릭스===
[홍길동=Student2@24d46ca6, 자바왕=Student2@4517d9a3]
이름: 홍길동, 정보: Student2@24d46ca6
이름: 자바왕, 정보: Student2@4517d9a3
이름명단: [홍길동, 자바왕]
정보: [Student2@24d46ca6, Student2@4517d9a3]