[java] HashMap

심심이·2024년 3월 3일
0

java

목록 보기
42/46
=== Map 계열 ===
1. HashMap 과 Hashtable 이 있다.
2. Map 계열은 List 계열(Vector, ArrayList, LinkedList)처럼 index 가 사용되어 저장되는 것이 아니라, 
   Map 계열은 key값과 value값을 쌍으로 사용하여 저장하는데  
   데이터 저장시 사용되는 메소드는 put(String key, Object value)메소드를 사용한다.
   이때 key값은 반드시 고유한 값을 가져야 하고, value값은 중복된 값이 와도 괜찮다.
3. Map 계열에 저장된 key값들은 순서와는 상관없이 저장된다.  
4. Map 계열에 저장된 value값을 추출하려면 key를 이용해서 가져오는데 
   value 값의 추출은 get(String key) 메소드를 사용한다. 

hash

  • Map 인터페이스를 구현, 데이터를 키와 값의 쌍으로 저장함.

  • 키(key) : id 같은 것. 컬렉션 내 키 중에서 유일해야 함(중복X)

  • 값(value) : passwd 같은 것. 중복을 허용한다.

  • 해시테이블에 데이터를 저장, 검색한다.
    key를 넣으면 해당 배열의 index를 알려주는 것.
    해시테이블은 배열과 링크드 리스트가 조합된 형태이다.

해시테이블에 저장된 데이터를 가져오는 과정
1. 키로 해시함수를 호출해서 해시코드(배열의 index)를 얻는다.
2. 해시코드(해시함수의 반환값)에 대응하는 링크드 리스트를 배열에서 찾음.

  1. 링크드리스트에서 키와 일치하는 데이터를 찾음. = 같은 키에 대해 같은 값의 해시코드를 반환해야 함. (서로 다른 키일지라도 같은 값 해시코드 반환할 수도 있음)

생성자

HashMap(),
HashMap(int initialCapacity) : 크기 설정
HashMap(int initialCapacity, float loadFactor)
HashMap(Map m) : 다른 map을 hashmap으로 바꿈


추가, 삭제, 변경 메소드

Object put(Object key, Object value) : 추가하기, key-value 묶어서 저장
void putAll(Map m) : Map에 있는 데이터 추가
Object remove(Object Key) : 삭제
Object replace(Object Key, Object value) : 변경
boolean replace(Object Key, Object oldValue, Object newValue) : 변경

읽기 메소드

Set entrySet() : 키와 값을 entry라고 하는데 이 entry를 얻어옴
Set KeySet(): 키값만 가져옴
Collection values(): value만 가져옴

Object get(Object key) : key를 넣으면 해당하는 value 반환
Object getOrDefault(Object key, Object defaultValue) : 매개변수로 넣은 key값이 데이터에 없을 때 지정된 defaultValue 반환
boolean containsKey(Object Key) : 키가 데이터에 포함되어 있는지 확인 (있으면 true 없을 시 false)
boolean containsKey(Object value) : 값이 데이터에 포함되어 있는지 확인


학습

     public static <userid, userid> void main(String[] args) {
//        HashMap<Integer, Member> mbr_map = new HashMap<Integer, Member>();
//
//        mbr_map.put(23423, new Member("youjs","Qwer1234$","유재석","7209101"));
//        mbr_map.put(564352, new Member("eom","Qwer1234$","엄정화","6808152"));
//        mbr_map.put(6345, new Member("kanghd","Qwer1234$","강호동","7006151"));
//
//        System.out.println(mbr_map.get(564352).toString());
//        //Object get(Object key) : key를 넣으면 해당하는 value 반환

Map<String, Member> mbr_map = new HashMap<>();

mbr_map.put("youjs", new Member("youjs","Qwer1234$","유재석","7209101")); 	// 주로 key 값은 id
mbr_map.put("eom", new Member("eom","Qwer1234$","엄정화","6808152"));
mbr_map.put("kanghd", new Member("kanghd","Qwer1234$","강호동","7006151"));
mbr_map.put("leess", new Member("leess","Qwer1234$","이순신","0010203"));
mbr_map.put("kimth", new Member("kimth","Qwer1234$","김태희","0105064"));
mbr_map.put("kangkc", new Member("kangkc","Qwer1234$","강감찬","9812301"));
mbr_map.put("kimss", new Member("kimss","Qwer1234$","김순신","0203203"));



System.out.println(mbr_map.get("kangkc")); // 강감찬

mbr_map.put("kangkc", new Member("kangkc"," Abcd0070$","강기춘","0112303"));
// map은 키 중복 x value 중복 o 인데, 중복되면 value값은 덮어씌운다.

System.out.println(mbr_map.get("kangkc")); // value가 강기춘으로 나옴

Member mem1 = new Member("parksj","Qwer1234$","박서준","8803201");
Member mem2 = mem1;
mem2.setName("이현우");

mbr_map.put("mem1", mem1);		// Key 값이 다르면 Value 값은 중복된 값이 들어와도 괜찮다.
mbr_map.put("mem2", mem2);		// 키만 다르면 동일한 value 를 넣어도 괜찮다.

System.out.println(mbr_map.get("mem1"));	// mem1가 key 값, 동일하게 이현우
System.out.println(mbr_map.get("mem2"));	// mem2가 key 값, 동일하게 이현우

값 읽어오기


// == mbr_map 에 저장되어진 모든 key들을 읽어오는 첫번째 방법 == //

Set<String> key_set = mbr_map.keySet();
// Map 계열에 저장된 key 값들은 순서와는 상관없이 저장 - Set 집합으로 저장
// Set KeySet(): 키값만 가져옴

for (String key : key_set) {
    System.out.println(key);
}
        /*
    eom
    youjs
    kimth
    kangkc
    kanghd
    kimss
    leess
    mem2
    mem1
 */
System.out.println("== mbr_map 에 저장되어진 모든 Member 객체의 정보를 출력해주는 첫번째 방법 ==");
for(String key : key_set) {
    System.out.println(mbr_map.get(key));
}// end of for-----------------

System.out.println("== [퀴즈] mbr_map 에 아래와 같이 새로운 회원을 가입하시는데 아이디가 중복이라면 " +
        "'아이디가 이미 사용중입니다.' 라는 메시지를 출력해주고 아이디가 중복이 아니라면 mbr_map 에 저장하도록 하세요..");
// new Member(userid,"aBcd0080$","이수성","9703201")
// 1. 키가 이미 있는지 찾고 그 키가 있다면 사용중, 없으면 저장

Set<String> key_set_2 = mbr_map.keySet();

String userid = "leess";

if(mbr_map.get(userid) == null) { // userid가 없다면
    mbr_map.put(userid,  new Member(userid,"aBcd0080$","이수성","9703201"));
    System.out.println("\n >>> 회원가입 성공 <<<");
} else {
    System.out.println("\n >>> " + userid + "아이디는 이미 사용중입니다. 회원가입 실패!! <<<");
}
profile
개발하는 심심이

0개의 댓글

관련 채용 정보