JAVA2_02_Iterator<E>, HashMap<K,V>

charl hi·2021년 9월 25일
0

JAVA2

목록 보기
2/8

링크텍스트

Iterator<E>

  • 클래스를 작성할 때, Object타입 대신 -> <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

Iterator 일반클래스)

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]



Ref

0개의 댓글