16일차(컬랙션 실습문제)

Rina's·2023년 5월 2일

코드스테이츠

목록 보기
15/96

Q. 배열을 리스트로 변환하는 메서드
A. Arrays.asList(배열)
새로운 객체가 아닌 기존 배열을 공유함으로 기존 배열 값이 바뀌면 따라서 바뀌게 된다
subList()도 동일하게 적용된다.
또한 ArrayList가 아닌 List로 반환하기 때문에 형변환을 추가로 해 줘야 한다.

Q. HashMap 내에 List가 value있는 구조
value값의 참조변수를 새로 생성하여 다루도록 하자

HashMap<String, List<String>>
myList<String> = HashMap.get(key)

Q. String str객체를 char배열로 만드는 메서드

char[] charArr = str.toCharArray()

Q. getOrDefault(key, defualt)
해당 key가 있으면 value을 리턴, 없으면 defualt값을 리턴하는 메서드
아래는 문자열을 key값으로, 중복횟수를 value로 put하는 코드

	 for (char key : charArr){
  	hashMap.put(key, hashMap.getOrDefault(key, 0)+1);
 	}
     중복있으면 (매핑된 값을 불러들여 +1) 없으면 계속 (0+1)되서 1로 입력됨

Q. 다음은 실습문제중 List를 value로 가지는 HashMap과 String key, int index를 입력받아, 해당하는 key가 HashMap에 존재하는 경우, List[index]를 리턴하라는 문제이다

public class Solution { 
  public String get(HashMap<String, List<String>> hashMap, String key, int index) {
    
    List<String> list = hashMap.get(key);

    if (list.size()-1 < index) return null;
    if (hashMap.containsKey(key)) return list.get(index);
    else return null;
    
  }
}

처음 작성한 답안이다. 여기엔 문제가 있는데 Key값이 Null값이 들어올 경우 get()으로 얻은 list의 값이 null이 되어 list.size()사용시 오류가 생긴다.
때문에 순서를 바꿔

public class Solution { 
  public String get(HashMap<String, List<String>> hashMap, String key, int index) {
    
    List<String> list = hashMap.get(key);
    if (!hashMap.containsKey(key)) return null;    
    if (list.size() <= index) return null;

    return list.get(index);
  }
}

key값의 유무를 확인 후 list.size()함수를 써서 null값이 오지 않도록 수정했다.

profile
갭린이 리나

0개의 댓글