개발 수업/JAVA

[Java] 컬렉션 프레임워크/Map컬렉션(HashMap)

오늘 하루s 2023. 5. 24. 20:13
728x90
더보기

Day19-1. 230524

컬렉션 프레임워크

Map컬렉션

HashMap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package chap13;
 
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
 
public class HashMapMain {
 
    public static void main(String[] args) {
 
        //Map인터페이스를 참조하는 HashMap객체 생성
        Map<Student,Integer> map1 = new HashMap<Student,Integer>();
        map1.put(new Student(1"홍길동""경영"'여'), 100); //Integer
        map1.put(new Student(2,  "이순신",  "컴공"'남'), 95);
        map1.put(new Student(3"세종대왕""국문"'여'),90);
        map1.put(new Student(3"세종대왕""국문"'남'),0);
        map1.put(new Student(4"세종대왕""국문"'남'),90);
        //동등객체의 기준은 학번
        //=>학번이 중복되면 덮어씌어짐.
        
        int size1 = map1.size(); //Key개수
        System.out.println("총 학생수:"+size1); //학생수출력
        
        //value출력->모든 학생의 점수를 출력
        Set<Student> keys1= map1.keySet();
        Iterator<Student> iter1= keys1.iterator();
        while(iter1.hasNext()) {
            Student key = iter1.next();
            int jumsu = (Integer)map1.get(key);
            System.out.println(key+"의 점수:"+jumsu);
        }
 
        System.out.println("-----------------------");
        Map<String,Integer> map = new HashMap<String,Integer>(); 
        map.put("홍길동",100); //Integer
        map.put("이순신",95);
        map.put("세종대왕",90);
        map.put("세종대왕",9);
        
        int size = map.size(); //Key개수
        System.out.println("총 학생수:"+size); //학생수출력
        
        //value출력->모든 학생의 점수를 출력
        Set<String> keys= map.keySet();
        Iterator<String> iter= keys.iterator();
        while(iter.hasNext()) {
            String key = iter.next();
            int jumsu = (Integer)map.get(key);
            System.out.println(key+"의 점수:"+jumsu);
        }
 
    }
 
}
 
cs
더보기

* 실행 결과

 

총 학생수:4
1학번/홍길동의 점수:100
2학번/이순신의 점수:95
3학번/세종대왕의 점수:0
4학번/세종대왕의 점수:90 //학번이 중복될 경우 같은 키로 인식
-----------------------
총 학생수:3
홍길동의 점수:100
이순신의 점수:95
세종대왕의 점수:9 //이름이 같을 경우 같은 키로 인식

 

hashCode()와 equals() 재정의>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package chap13;
 
public class Student {
    //필드
    private int stuNo; //학번
    private String stuName; //학생명
    private String major; //전공
    private char gender; //성별
    
    //생성자
    public Student() {}
    public Student(int stuNo, String stuName, String major, char gender) {
        this.stuNo = stuNo;
        this.stuName = stuName;
        this.major = major;
        this.gender = gender;
    }
    
    
    //메서드
    @Override
    public String toString() {
        return this.stuNo+"학번/"+this.stuName; 
    }
    
    @Override
    public int hashCode() {
        return this.stuNo;
    }
    
    
    @Override
    //자신과 (매개변수 Object obj변수에 담긴)비교객체가 동일하면 true리턴, 그렇지않으면 false리턴
    public boolean equals(Object obj) {
        //obj!=null : 참조변수 obj에 null이면 안된다 -> 객체주소가 존재
        //obj instanceof Student : 참조변수 obj의 객체가 Student클래스의 객체라면 true
        if( (obj!=null&& (obj instanceof Student) ){
            Student student = (Student)obj; //(Student)obj 참조변수 obj의 클래스를 Student클래스로 강제형변환
            return this.stuNo == student.stuNo; //갹체자신의 학번==매개변수에 담긴 학생의 학번
        }else {
            return false;
        }
    }
}
cs

 

728x90