어제 공부했던 내용들이 많아서
밤늦게까지 공부하다 잠을 잤다.
머리가 뒤죽박죽 어지러워~

image

오늘 복습하는 느낌으로
컬렉션 관련 문제풀이 시간이 왔다.
복기하면서 열심히 정리해 바로바로 쓸 수 있도록 연습해야겠다


어제는 컬렉션에 대해 공부했었다.
List와 Map, Set 등 연습 문제를 푸는 시간이 왔다.
오늘 연습해본 것들을 정리해보자!

ArrayList

ArrayList (Java SE 11 & JDK 11 )
ArrayList API 문서를 보면서 공부했다.

간단한 정리를 위해 아래와 같이 객체를 만들었다고 가정하자!
ArrayList arrayList = new ArrayList<>():


1. arraysList.add();
List 목록에 요소들을 추가해주는 구문이다.
add의 사용 방법은 오늘 3가지정도 사용했다.

add(E element);
-> 지정된 요소를 List 맨 끝에 추가하는 구문이다.

add(int index,E element);
-> 지정한 index위치에 해당 요소를 추가하는 구문이다.
여기서 주의할 점은 배열과 같이 index범위가 벗어난 곳을 지정하면
IndexOutOfBoundsException 예외가 발생하니 주의해야한다.

image

addAll(Collection<? extends E> c);
-> 지정된 컬렉션의 Iterator에서 반환된 순서대로 지정된 컬렉션의 
모든 요소를 이 목록의 끝에 추가합니다.

간단한 예를 들어보자

ArrayList<String> arrayList1 = new ArrayList<>();
ArrayList<String> arrayList2 = new ArrayList<>();

arrayList1.add(0,"A");
arrayList1.add(1,"B");
arrayList1.add(2,"C");
System.out.println(arrayList1);

arrayList2.addAll(arrayList1);
System.out.println(arrayList2);

//출력
[A, B, C]
[A, B, C]

동일한 List 객체 arrayList1과 2를 만들었다.
arrayList1에는 값을 add시켜주고
arrayList2에는 arrayList1의 값을 addAll 시켜주어
동일한 값이 출력되는 모습을 볼 수 있다.


2.  arrayList.remove();
해당 리스트에 있는 요소들을 지워주는 메서드이다.

remove(int index)
-> 지정된 위치의 요소를 제거한다. int형으로 값을 입력.
반환 타입은 요소가 반환된다.

ArrayList<String> arrayList1 = new ArrayList<>();
arrayList1.add(0,"A");
arrayList1.add(1,"B");
arrayList1.add(2,"C");
System.out.println(arrayList1);
System.out.println(arrayList1.remove(0));

//출력
[A, B, C]
A

위와 같이 0번 인덱스를 지웠고, 해당하는 요소인 “A”가 반환되어진 모습니다.
String 타입의 A이기때문에 String으로 반환되어진 값이다.


3. arrayList.size();
리스트의 요소 개수를 나타내주는 메서드였다.
반환타입은 int형으로 반환되며, 넘겨주는 인자는 따로없다.

아래의 예제를 보자.

ArrayList<String> arrayList1 = new ArrayList<>();
arrayList1.add(0,"A");
arrayList1.add(1,"B");
arrayList1.add(2,"C");
System.out.println(arrayList1);
System.out.println(arrayList1.size());

//출력
[A, B, C]
3

A,B,C 요소가 들어있으므로 int형 3이 출력되어진다.


4. arrayList.get();
해당 인덱스의 요소를 반환해주는 메서드이다.

get(int inedx)
-> 인자로 인덱스값을 넘겨주며, 반환타입은 E
즉, 요소가 반환되어진다. 요소는 위에서 얘기했듯이
선언되었을때의 타입매개변수로 지정한 것을 얘기한다.

ArrayList<String> arrayList1 = new ArrayList<>();
arrayList1.add(0,"A");
arrayList1.add(1,"B");
arrayList1.add(2,"C");
System.out.println(arrayList1);
System.out.println(arrayList1.get(0));

//출력
[A, B, C]
A

0번 인덱스의 요소를 뽑아내는 프로그램이다.
String형태의 A가 출력되어지는 모습.


5. arrayList.clear();
해당 List안의 요소를 지워주는 메서드이다.
반환타입은 void이며, 따로 반환되어지는 것이 없다.

ArrayList<String> arrayList1 = new ArrayList<>();
arrayList1.add(0,"A");
arrayList1.add(1,"B");
arrayList1.add(2,"C");
System.out.println(arrayList1);
arrayList1.clear();
System.out.println(arrayList1);

//출력
[A, B, C]
[]

clear(); 메서드 진행후 출력시
List가 비어있는 모습


6. arrayList.isEmpty();
해당 List의 요소의 유무를 확인하는 메서드이다.
넣어주는 인자는 따로없고
반환 타입은 boolean으로 반환하게 되어진다.
List안의 요소가 있으면 false / 요소가 없으면 true

ArrayList<String> arrayList1 = new ArrayList<>();
arrayList1.add(0,"A");
arrayList1.add(1,"B");
arrayList1.add(2,"C");
System.out.println(arrayList1);
System.out.println(arrayList1.isEmpty());
arrayList1.clear();
System.out.println(arrayList1.isEmpty());

//출력
[A, B, C]
false
true

위의 코드로 isEmpty(); 메서드를 호출해
비어있는지 유무확인을 할 수 있다.


HashMap

HashMap (Java SE 11 & JDK 11 ) HashMap도 ArrayList와 마찬가지로 공식 API 문서를 통해
많은 도움을 얻었다. 문서를 보고도 모르면 구글링으로! 알아보는 식으로 공부중이다.

hashMap은 앞전에 공부했듯이 Entry구조로 Key와 Value가 쌍둥이마냥
따라다니기때문에 조금더 나를 헷갈리게 한 것 같다….
오늘 공부하고 사용해봤던 문법을 정리해보자!!

순조로운 설명을 위해
HashMap<String, Integer> hashMap = new HashMap<>();
라고 선언되었다고 가정하고 적어보겠다.


1. hashMap.put()
저장된 값을 맵의 지정된 키와 연결해주는 메서드이다.
간단하게 얘기하면 ArrayList의 add와 같은 느낌이다.

hashMap.put(K key, V value)
-> 위에서 얘기했듯이 Map들은 entry 구조로
키와 값을 가지고 있다. 말그대로 키와 값을 인자로 넣어주어야하며
위에 hashMap을 선언했을때 Key는 String / value는 Integer로 지정해주었기 때문에
hashMap.put(“이재혁”,177); 이런식으로 지정된 값을 맵의 키와 연결해줄 수 있다.

반환 타입은 V, 즉 값이다.

HashMap<String ,Integer> hashMap = new HashMap<>();
System.out.println(hashMap);
hashMap.put("이재혁",176);
System.out.println(hashMap);

//출력
{}
{이재혁=176}

hashMap.put을 키와값을 한뒤에
출력했을때 위와 같이 담겨져있는 객체가 표시된다.
같은 키값을 두번 put을 하였을 경우 중복된 값은 허용되지않고
마지막에 put한 value가 저장되어진다.


2. hashMap.entrySet();
Map을 entry타입의 Set으로 바꾸어주는 메서드이다.
따로 넘겨주는 인자는 없다.
반환타입은 Set<Map.Entry<K,V>> 이다.
반환타입이 살짝 어려운데… Set로 한가지의 객체가 담겨질 수 있기때문에

Map.Entrt<K,V>로 담아서 Set으로 변환시킨 모습이다.

HashMap<String ,Integer> hashMap = new HashMap<>();
hashMap.put("이재혁",177);
hashMap.put("아무개",184);
System.out.println(hashMap);

Set<Map.Entry<String, Integer>> entrySet = hashMap.entrySet();
System.out.println(entrySet);

//출력
{아무개=184, 이재혁=177}
[아무개=184, 이재혁=177]

첫번째 출력은 hashMap상태로 출력된 모습이며
두번째 출력은 entrySet으로 변경된 형태의 모습이다.
Set 컬렉션에 가장 큰 특징은 중복을 허용하지 않고 순서가 상관없는 특징이 있다.
entrySet으로 바꾸는이유는 iterator 반복자를 사용하기 위해서이다.

Map에는 반복자를 사용하지 못하기 때문에
iterator가 사용가능한 Set으로 변경해주는 것이다.


3. hashMap.keySet();
위의 entrySet과 비슷하다. entrySet은 Key와 Value를 Set으로 바꾸는 것이였으면
keySet은 Key 객체들만 Set 타입으로 변경하는 것이다.
똑같이 넘겨주는 인자는 없고, 반환 타입은 Set<K>를 반환한다.

hashMap.put("이재혁",177);
hashMap.put("아무개",184);

System.out.println(hashMap);

Set<String> keySet = hashMap.keySet();
System.out.println(keySet);

//출력
{아무개=184, 이재혁=177}
[아무개, 이재혁]

출력되어진 값들은 Key값만 가지고 있는 Set객체이다.
위에서 Key값을 String으로 선언했기에
Set<String>이 반환타입이 된다.


4. hashMap.values();
위에서 Entry와 Key를 Set으로 바꾸었다면
값에 해당하는 value도 Set으로 바꿔주는 메서드이다.
마찬가지로 넘겨주는 인자는 없고
반환 타입은 Collection<V>가 되어진다.

HashMap<String ,Integer> hashMap = new HashMap<>();
hashMap.put("이재혁",177);
hashMap.put("아무개",184);

System.out.println(hashMap);

Collection<Integer> valuesSet = hashMap.values();
System.out.println(valuesSet);

//출력값
{아무개=184, 이재혁=177}
[184, 177]

마찬가지로 값을 반환한 객체가 표시되어진다.


5. hashMap.get();
Key에 맵핑되어있는 값을 찾아주는 메서드이다.

get(Object Key);
-> get 메서드안에 Key에 해당하는 객체를 넣어주면 V, 즉 값이 반환되어지는 메서드이다.

HashMap<String ,Integer> hashMap = new HashMap<>();
hashMap.put("이재혁",177);
hashMap.put("아무개",184);

System.out.println(hashMap);
System.out.println(hashMap.get("아무개"));

//출력
{아무개=184, 이재혁=177}
184

get메서드에 “아무개”라는 스트링 값을 키로 호출시키면
해당 키의 값인 Integer형 184라는 값이 반환되게 되어진다.


6. hashMap.remove();
존재하는 경우 지정된 키의 맵핑을 지워주는 메서드이다.

remove(Object Key);
-> get과 동일하게 Key에 해당하는 객체를 넣어주면 V, 즉 값이 반환되어지는 메서드이다.

hashMap.put("이재혁",177);
hashMap.put("아무개",184);

System.out.println(hashMap);
System.out.println(hashMap.remove("아무개"));
System.out.println(hashMap);

// 출력
{아무개=184, 이재혁=177}
184
{이재혁=177}

2개로 맵핑되어있는 Map에 remove(“아무개”);를 호출함으로써
아무개에한 반환값 Integer 184를 반환하게되고
Map에서는 아무개가 사라진 모습을 볼 수 있다.


7. hashMap.size();
ArrayList와 동일하게 맵핑되어있는 Entry 개수를
int형으로 반환해준다. 호출할때 인자는 따로 없다.

hashMap.put("이재혁",177);
hashMap.put("아무개",184);

System.out.println(hashMap);
System.out.println(hashMap.size());

//출력
{아무개=184, 이재혁=177}
2


8. hashMap.containsKey();
현재 맵핑되어있는 Key가 있으면 boolean 타입으로 반환해주는 메서드이다.

containsKey(Object Key);
-> Key값을 인자에 넘겨주고 호출하면, 해당 Key와 동일한
Key가 있으면 true로 반환 / 없으면 false로 반환한다.

hashMap.put("이재혁",177);
hashMap.put("아무개",184);

System.out.println(hashMap);
System.out.println(hashMap.containsKey("아무개"));
System.out.println(hashMap.containsKey("홍길동"));

//출력
{아무개=184, 이재혁=177}
true
false


9.hashMap.containsValue();
현재 맵에 하나 이상의 키를 지정된 값에 매핑하는 경우 boolean 타입으로 반환해주는 메서드이다.
위와 의 차이점은 Key, Value 어느 것을 주체로 비교할지이다.

**containsValue(Object Value);**
-> Value 값을 인자에 넘겨주고 호출하면, 해당 Value와 동일한
Value 가 있으면 true로 반환 / 없으면 false로 반환한다.

hashMap.put("이재혁",177);
hashMap.put("아무개",184);

System.out.println(hashMap);
System.out.println(hashMap.containsValue(177));
System.out.println(hashMap.containsValue(190));

//출력
{아무개=184, 이재혁=177}
true
false

마치며…

오늘은 주로 문제 풀이에 시간을 가졌다. 알고리즘과 같은? 초보자용으로 연습하게 좋게 만들어 놓은
코드스테이츠만의 풀이장이 있다.

처음 문법에 익숙하지 않은 우리들에겐 매우 유용한 컨텐츠라고 생각하고
문제를 어떻게 풀지 페어와 같이 고민한다는 점이있어서
사고력을? 기를 수 있는 시간이었다.

오늘 주로 많이 사용했던 메소드들을 정리해보았고
반환타입과 넘겨줄 인자를 아는 것이 조금 중요하다고 생각든다.
그래야 오류가 안발생하고 문법에 맞는 내의도대로 풀고있다고
느껴지기 때문..?이랄까…
여하튼ㅎ;; 오늘 이론으로만 공부했던 내용들을
IDE를 통해서 연습해보고 매우 유익했던 하루였다!!

오늘 공부는 여기서 끝!!


오늘의 커피량: ☕️ ☕️ ☕️ ☕️️️️
오늘의 점심: 삽첩분식 떡볶이