일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 커밋메세지수정
- 검색
- 메소드명
- foreignkey
- Query
- 참조키
- 적용우선순위
- 2 > /dev/null
- EC2
- WeNews
- 컨테이너실행
- ㅔㄴ션
- 서브쿼리
- 메세지수정
- 예약
- 추후정리
- AuthenticationEntryPoint
- docker명령어
- 테스트메소드
- MySQL
- appspec
- 테스트
- querydsl
- application.yml
- 포트
- appspec.yml
- 네이티브쿼리
- ubuntu
- 외부키
- subquery
Archives
- Today
- Total
제뉴어리의 모든것
[Section1][Java] 컬렉션 - 컬렉션프레임웍 - 2 (List) 본문
List
배열과 같이 데이터들을 순차적으로 관리하고 저장한다. 그렇기 때문에 인덱스로 데이터를 검색, 추가, 삭제가 가능하다.
List의 구현체
- ArrayList
List의 구현체이므로 데이터가 순차적으로 존재하며 중복이 가능한 클래스이다.
내부적으로 데이터를 배열로 관리하며,
데이터의 검색, 추가, 삭제시에 인덱스로 접근이 가능하도록 구현되어 있다.
그리고 내부적으로 배열을 사용하지만, 실제 배열과는 다르게 데이터 추가시 ArrayList의 저장용량이 초과된 경우 알아서 저장용량을 넓히고 새로운 저장공간(ArrayList 내부에서 쓰이는 배열)을 만든 뒤에 기존 데이터들을 기존 순서대로 모두 복사해준다.
- 장점
1. 데이터의 검색이 빠르다
시작주소 + (한데이터의 크기 * 인덱스) 를 하면 바로 접근이 가능하므로 빠르다.
2. 순차적인 데이터의 추가, 삭제가 빠르다.
단, 마지막 인덱스 위치에서 추가, 삭제를 해야만 빠르다.
단지 배열의 끝인덱스 변수에 데이터를 넣어주는 개념이다.
3. 저장 용량 부족시 알아서 저장 용량을 넓혀준다.
- 단점
결국 내부적으로 배열을 사용하므로,
처음 혹은 중간 위치에 데이터를 삭제하거나 추가할 경우에 해당 인덱스 위치 이후의 데이터들은 한칸씩 당겨지거나, 한칸씩 밀려지는 작업이 필요하다. - LinkedList
List의 구현체이므로 ArrayList와 마찬가지로 데이터를 순차적으로 관리하고 데이터의 중복또한 가능한 클래스이다.
그러나, 내부적으로 각각의 데이터를 노드(Node)화 하여 관리하고 각 노드는 자신의 이전 노드, 다음 노드의 주소값을 가지고 있는 링크같은 구조이다.
- 장점
1. 데이터 추가, 삭제에 효율적
배열과 같이 추가, 삭제하는 위치의 이후 데이터를 복사할 필요 없이,
추가, 삭제할 위치의 이전, 이후 노드가 가르키는 주소값 변경만 해주면 된다.
- 단점
1. 데이터 검색(접근)이 느리다
특정 데이터를 찾아가기 위해 시작노드에서 부터 목표 인덱스 위치에 노드까지 순차적으로 접근하여야 하므로 느리다.
ArrayList와 LinkedList의 차이점과 결론
데이터들의 중간 위치에 잦은 추가, 삭제, 수정이 필요하다면 LinkedList가 효율적이고, 그렇지 않은 경우는 ArrayList가 효율적이다.
'코드스테이츠 > 정리 블로깅' 카테고리의 다른 글
[Section1][Java] 심화 - Enum (0) | 2022.07.18 |
---|---|
[Section1][Java] 컬렉션 - 컬렉션프레임웍 - 2 (Set) (0) | 2022.07.14 |
[Section1][Java] 컬렉션 - Generic (0) | 2022.07.14 |
[Section1][Java] 객체지향 프로그래밍 심화 - 추상화에 대하여 (0) | 2022.07.13 |
[Section1][Java] 객체지향 프로그래밍 심화 - 다형성에 대하여 (0) | 2022.07.13 |