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값이 오지 않도록 수정했다.