오늘은 JAVA문법을 공부했다.
연산자와 조건문,반복문, 배열에 컬렉션등을 공부했다.
문제점
컬렉션 문제중 Map자료구조 사용중 순서대로 저장한 값을 출력하는 방법에서 Set이나 List와 같은 방법으로는 출력이 되지않음.
해당 List출력방법
ArrayList<String> strList = new ArrayList<String>();
while (true)
{
String desc = sc.nextLine();
strList.add(desc); //List에 해당 문자열을 add
if (desc.equals("끝")) { //끝 문자를 입력시 반복중지
break;
}
}
for(String str: strList){ //forEach를 이용해 출력
System.out.println(str);
}
시도해본 것들
- 위와 같은방법 시도 : Key값을 받아와서 value를 찾는 자료구조이니 만큼 구조가 달라서 실패.
- 스파르타 강의를 다시 보고 얻은 방법 : forEach를 이용한 방법
- 구글링을 통해 얻은 방법 : iterator반복자를 이용하는 방법
해결
forEach를 이용하는 방법
- for({key값형식} key: {Map이름}.keySet())를 이용해 키를 받아온다. 그 뒤 String value = (String){Map이름}.get(key); 를 이용해서 값을 받아와 출력한다.
for(Integer key: strMap.keySet()){ //forEach이용
String value = (String)strMap.get(key);//키 값에 맞는 String값을가져와 value에 넣어준다.
System.out.println(value);
}
iterator반복자를 이용하는 방법
- 해당 반복할 데이터에 Iterator를 만들어 {Map이름}.keySet().iterator();를 넣어주고, iterator.hasNext()가 false가 될때까지 돌아준다. ket값을 iterator.next()로 받아오고 그 키값을 이용해 밸류를 찾아서 출력해준다.
Iterator<Integer> iterator = strItMap.keySet().iterator();
while (iterator.hasNext()) {
Integer itKey = iterator.next();
String value = (String)strItMap.get(itKey);
System.out.println(value);
}
알게된 것
index가 없는 자료구조의 경우 그 내부를 돌기위해 forEach나 iterator를 이용해 돌아야한다.
Map은 다른 자료구조와는 또 다르게 keySet()함수나 가져온 키를 이용해 get(키값)함수를 이용해 데이터들을 가져와야한다.
참고자료 : https://ktko.tistory.com/entry/%EC%9E%90%EB%B0%94-Map-%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0
그 외 알게된 것
- 연산자 우선순위는 산술>비교>논리>대입 순이다.
- String함수중에 subString은 자르기 subString(*부터, *앞까지)
- toCharArray() String값을 char[]로 나눠준다.
- 역으로 char[]형은 new String(char[])으로 String형으로 변경할 수 있다.
ArrayList기초
ArrayList<Integer> intList = new ArrayList<Integer>();
intList.add(4);
intList.add(2);
intList.add(3);
System.out.println(intList.get(2));
intList.set(1,39);
System.out.println(intList.get(1));
intList.remove(1);
System.out.println(intList.toString());
intList.clear();
System.out.println(intList.toString());
- LinkedList는 ArrayList와 같지만 조회속도가 느리고 추가,삭제 속도가 빠르다.
- Set은 중복을 제거한다.