[스터디] ArrayList & LinkedList

수댕이·2023년 12월 13일
0

스터디

목록 보기
1/11
post-thumbnail

📍Array

Array 정의

인덱스와 인덱스에 대응하는 데이터들로 구성된 자료구조

배열의 특징

  • 초기에 크기를 지정하고 수정이 힘든 정적인 구조이다.
    따라서 데이터를 추가하고 삭제하기 어렵다.
  • 메모리가 연속적으로, 순차적으로 나열된다.
    배열의 첫 요소 array[0]부터 인덱스를 가진다.
    따라서 참조와 검색이 쉽다.
  • 데이터 삭제 시 해당 공간은 공백으로 유지된다.

📍ArrayList

ArrayList 특징

  • 배열을 가변 크기로 다룰 수 있다. 데이터가 동적으로 할당된다.
  • 데이터를 배열에서 관리한다. 만약 배열의 공간이 가득 찬 경우 임시 배열을 생성해 데이터를 복사해서 데이터를 삽입한다.
  • 연속적인 데이터 리스트이기 때문에 빈 공간이 없어야 한다.
  • 데이터를 삽입하거나 삭제하는 경우 요소들의 위치가 조정된다. 따라서 삽입과 삭제의 속도가 느리고 성능이 저하된다.
    예를 들어, 놀이공원에서 놀이기구를 타기 위한 줄을 섰다고 가정하자. 이때 누군가 새치기를 한다면 사람들이 한 자리씩 뒤로 이동해야한다. 반대로 누군가가 줄 밖으로 나갔다면 사람들은 한 자리씩 앞으로 당겨올 것이다. 처음 경우가 데이터를 삽입하는 경우, 후의 경우가 데이터를 삭제하는 경우이다.
  • Array와 마찬가지로 인덱스를 가진다. 따라서 조회(검색)을 많이 하는 경우 ArrayList를 사용하는게 좋다.

📍LinkedList

LinkedList 구성

데이터 필드 + 링크 필드로 구성된 노드에서 링크 필드에 다음 노드에 대한 포인터를 저장하여 연결한 리스트의 형태이다.

연결 리스트의 특징

  • 순차적으로 데이터를 찾는다. 데이터를 검색하는 경우 리스트의 처음부터 노드를 순회하며 찾기 때문에 성능 상 불리하다.
  • 링크에 연결만 하면 되기 때문에 데이터의 추가와 삭제가 쉽다.

연결 리스트의 종류

단순 연결 리스트

노드의 링크 필드에서 다음 노드를 단순히 한 방향으로 연결한 리스트

이중 연결 리스트

노드의 링크 필드를 두 개 사용해서 현재 노드와 다음 노드가 양방향으로 연결된 리스트

환형 연결 리스트

단순 연결 리스트에서 마지막 노드가 첫 노드를 가르키게 만들어 리스트의 구조를 원형으로 만든 리스트

📍첫 스터디 회고

  • 발표 전 회고

    우선 스터디에 참여한 것 자체가 처음이다.
    인생 첫 스터디...! 그러다보니 어떤 수준까지 준비를 해야하는지 모르겠다.
    오늘 팀원분들과 스터디를 진행해보고 조정을 해봐야겠다.

    오늘 공부한 내용은 솔직히 너무 겉핥기라는 생각이 들었다.
    단순히 각 개념들의 정의나 특징만 알고 있어도 괜찮을까?
    조금 더 깊게 공부할 필요가 있는 것 같다.
    예를 들면 코드를 조금이라도 작성하고 결과를 확인한다거나 언제 이 자료구조를 사용하는지를 더 명확하게 알아보는 식으로 진행을 해야겠다.
    내일 스터디 준비하면서 이런 부분에 조금 더 집중해서 공부해야겠다.

  • 발표 후 회고
    발표를 해보니까 내용 정리도 중요하지만 어떻게 전달할지도 중요하다고 생각했다.
    내일은 어떤 식으로 발표할지 조금 정리해서 발표해봐야겠다.

    팀원분이 생각지도 못한 질문을 주셔서 조금 당황했는데 충분히 생각해볼 문제였고 고민하는게 재밌을 것 같은 질문이었다.
    배열은 정적인데 그럼 동적으로 사용하는 배열은 배열로 불러야 할지 리스트로 불러야 할지라는 질문이었다. 이 질문에 도움이 될만한 글
    ArrayList와 LinkedList의 차이(어떤 경우에 사용하는게 효율적인지)를 이론적으로 보기는 했는데 실제 현업에서는 거의 ArrayList만 사용한다는 이야기도 나눴다. 왜 LinkedList는 거의 사용하지 않을까?

    스터디가 처음이고 떨렸는데 조금 더 잘할 수 있게되면 발표도 재밌어질 것 같다.
    서로에게 생각할 질문을 떠올리는 것, 생각하면서 공부한다는 것이 뭔지 조금은 알 것 같다.
    저런 방식으로 생각하고 질문하면서 공부를 해야겠다.

📍공부한 곳

https://inpa.tistory.com/entry/JAVA-%E2%98%95-ArrayList-%EA%B5%AC%EC%A1%B0-%EC%82%AC%EC%9A%A9%EB%B2%95
https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Data%20Structure/Array%20vs%20ArrayList%20vs%20LinkedList.md
https://www.holaxprogramming.com/2014/02/12/java-list-interface/

profile
공부하자

0개의 댓글