코딩 테스트들을 푸는데 스트림에 대한 논란이 많았다.
과연 스트림은 효과적인가? 가독성이 좋아지는가? 안좋아지는가?
등등 다양한 이야기들이 많은데
정답은 적절한 곳에 스트림과 for문을 써야 한다는 것이다.
마찬가지로 자바를 배우면서 다양한 자료 구조들이 나오는데,
아직 정확하게 다는 모르기도 하고,
실제 프로젝트에서 사용해보지 않은 것들도 많아서
한번 공부 목적으로 챗GPT에게 간단하게 정리해달라고 하였다.
이후 경험과 실력이 많이 쌓이면 자료구조 하나 하나에 대해
실제로 코드들을 보면서 더 자세한 내용들을 적어보고 싶다.
배열의 핵심은 정해진 길이!
O(1)).O(n)).동적 배열은 가변적인 크기가 필요할 때!
O(1)).O(n)).O(1)).O(n)).주머니 같은 HashSet!
O(1) 평균).O(log n)).파이썬의 Dictionary와 비슷한 키, 값 쌍
O(1) 평균).O(log n)).탑 같은 스택! 하노이의 탑 구현에 사용하기도!
O(1)).작업 대기열 같은 느낌!
O(1)).O(log n)).실제로 사용해본 구조와 그렇지 않은 것이 이해의 속도가 차이가 많이 난다!
실제로 많이 사용해보고 배우자!!
(마지막으로 챗GPT 선생님이 알려주시는 유치원생을 위한 자바 자료구조)
자바의 자료구조를 유치원생이 이해할 수 있도록 아주 간단하게 설명해 볼게요!
자료구조는 데이터를 잘 정리해서 쉽게 찾고 사용할 수 있게 도와주는 방법이에요. 예를 들어, 우리가 장난감을 정리할 때 상자에 넣거나, 선반에 놓는 것처럼, 자료구조는 데이터를 어떻게 정리할지 알려주는 거예요.
1. 배열 (Array)
배열은 장난감을 상자에 하나씩 정리하는 것과 같아요. 상자 안에 하나씩 장난감을 넣고, 순서대로 찾을 수 있어요. 예를 들어, 상자 안에 "인형", "자동차", "블록" 순서대로 놓는 거죠. 배열은 순서대로 정리된 장난감들이에요.
2. 리스트 (List)
리스트는 배열과 비슷한데, 나중에 장난감을 더 넣거나 뺄 수 있는 상자 같아요. 만약 상자 안에 장난감이 하나 더 필요하다면, 새로 장난감을 추가할 수 있어요. 목록처럼 늘어날 수도 있고 줄어들 수도 있어요.
3. 큐 (Queue)
큐는 장난감을 줄 서서 기다리는 것과 같아요. 첫 번째 장난감을 제일 먼저 꺼내고, 그다음 장난감을 꺼내는 방식이에요. 예를 들어, 친구들이 줄을 서서 차례대로 차를 타는 것처럼요!
4. 스택 (Stack)
스택은 장난감을 쌓아놓는 것과 같아요. 하나씩 쌓은 후, 맨 위에서 장난감을 꺼낼 수 있어요. 예를 들어, 블록을 하나씩 쌓고, 마지막에 쌓은 블록부터 먼저 꺼내는 거예요.
5. 맵 (Map)
맵은 장난감을 이름과 함께 정리하는 것 같아요. 예를 들어, "인형"은 "침대"에, "자동차"는 "도로"에 놓는 거예요. 그래서 나중에 "인형 어디에 있지?" 하면 바로 "침대"라고 알 수 있죠!
이렇게, 자료구조는 데이터를 잘 정리해서 나중에 쉽게 찾고, 꺼내고, 바꿀 수 있게 도와주는 방법들이에요!