* List Interface
- ArrayList, LinkedList의 구현체
- Vector, Stack은 지금은 사용하지 않지만 호환성을 위해 남겨둔 Class
- 순서가 있는 데이터의 집합
- 인덱스로 객체에 접근 할 수 있다.(공통)
* List 주요기능
- 삽입: List.add(값);
- 중간 삽입: List.add(index, value); : index: 중간에 넣을 인덱스(배열 인덱스),value: 중간에 넣을 값. (중간에 값을 넣을 경우 중간에 넣은 값 이후에 값들은 한 칸씩 밀리게 됩니다.
- 치환: List.set(index, value); : 중간 삽입과 비슷하게 index는 치환할 값 자리에 인덱스이고 value는 치환할 자리에 값이다.
- 삭제: List.remove(index); : 인덱스 위치에 있는 값을 삭제한다.
- 전체 삭제: List.clear(); 모든 요소를 삭제
- 출력: List.get(index) : 인덱스 위치에 있는 값을 출력
- 사이즈: List.size() : 리스트에 크기를 알 수 있다.
* List 특징
- 특정 요구사항이 없을 경우, 요소의 추가는 LIST 제일 마지막에 추가
- 데이터간 사이에 공백 비허용 => GC(Garrbage Collection/가비지 컬렉터)으로 배열 관리(GC : JVM 의 heap영역에서 동적으로 할당했던 메모리 영역 중 필요 없게 된 메모리 영역을 주기적으로 삭제하는 프로세스) 를 통해 메모리 누수(Memory Leak)문제 방지 (GC단점 : 1. 개발자가 메모리 해제 시점을 파악하기 어려움, 2. GC가 동작하는 동안에는 다른 동작을 멈추기 때문에 오버헤드가 발생 *오버헤드: 프로그램의 실행흐름에서 나타나는 현상중 하나, 프로그램의 실행흐름 도중에 동떨어진 위치의 코드를 실행시 추가적으로 시간, 메모리, 자원이 사용되는 현상)
- 중복 허용
- 크기 조절 가능
- 컬렉션 인터페이스중 하나
* 포괄적인 List 개념 중 자바에 해당하는 List개념 ?
- 순서가 있는 엘리먼트의 모임(배열과는 다르게 빈 엘리먼트는 절대 허용x)
- 배열이 지닌 인덱스라는 장점 대신 빈틈없는 데이터의 적재라는 장점
- 리스트에서 인덱스는 몇 번째 데이터인지 순서의 의미
- ' java에서는 빈 엘리먼트를 허용하는 경우가 있음' 이라는 표현이 간혹 검색했을 때 뜨는데, 사실상 빈값이 아니어야 한다. 값이 없다면 ArrayList든 LinkedList든 어차피 당겨지기 때문에 어차피 null처럼 값이 설정되어 있어야 한다
- 일시적 메모리 공간 차지.(불연속적 메모리 공간 차지라는 표현도 뜨는데 ,,잠깐 사용한다고 생각하는게 나은 것 같다.)
- 포인터를 통한 접근(C나 C++ 에는 포인터라는 개념이 존재하지만 Java에는 포인터라는 개념을 사용하지 않는다. 비슷한 개념으로 참조라는 것을 사용한다. 하지만 둘은 다른 개념이다. 그 둘의 차이점에 대해 일단 스킵)
- (순서o, 정렬 x) 순차성을 보장하지 못하기 때문에 공간적 지역성(spatial locality) 보장이 되지 않아서 cache hit이 어렵다. (데이터 갯수를 딱 정해서 자주 사용될 목적이면 array가 더 좋다.그런데, 이 내용은 컴퓨터 공학에 해당해서 스킵)
따라서~ List는 ArrayList와 LinkedList 2종류만!
Class | Base Class | Base Interface | 순서 보장 | 정렬 여부 |
ArrayList | AbstractList | List | o | x |
LinkedList | AbstractSequentialList | List , Deque | o | x |
여기에서 순서 보장은 3, 2, 7 처럼 배열에 적어둔 순 대로 => 3, 2, 7 출력
그런데,
정렬 보장은 3, 2, 7 => 2, 3, 7 처럼 내림차순이던 오름차순같은 기준이 적용되어 출력됨을 의미
각 종류별 특징 기억해보기!
* ArrayList
- 사용하는 이유 : 기본 배열(int[ ] a = new int[ ]) 사용시 해당 인덱스 값이 다 차서 값을 넣지 못하거나, 인덱스를 다 못 채워서 메모리가 낭비될 수 있는 점 때문에 ArrayList를 사용한다. (배열과 매우 유사하지만 배열은 배열 선언 시 크기도 같이 지정해 줘야 하는데, ArrayList는 크기를 지정하지 않아도 되며 추가될 때마다 크기가 정해집니다.)
- 요소를 순차적으로 추가
- 단점: 객체의 삽입 / 삭제가 자주 있을 때 ArrayList는 비효율적이다. 중간 값을 수정할 때 인덱스 값을 수정하고 그 부분 부터 순서에 맞게 다시 채워야 하기 때문이다.
* LinkedList
- 하나의 리스트에는 다음 리스트와 이전 리스트의 주소들이 서로 연결되어 있습니다.
- LinkedList는 index로 값을 저장하지 않고, 연결된 객체(노드)들의 주소 값을 가지고 있기 때문에 객체의 삽입 / 삭제가 ArrayList보다 빠르다.
<참고 티스토리 >
https://jinyoungchoi95.tistory.com/9
[JAVA] ArrayList 직접 구현하기
ArrayList란 ArrayList는 Collection Framework(컬랙션 프레임워크)란 여러 개의 데이터를 쉽고 효율적으로 관리할 수 있는 표준화된 방법을 제공하는 클래스 중 하나이다. 컬랙션 프레임 워크 중 List 인터
jinyoungchoi95.tistory.com
https://velog.io/@sunnamgung8/%EC%9E%90%EB%B0%94List%EC%BB%AC%EB%A0%89%EC%85%98
[자바]List(컬렉션)
목차 리스트(List)란?리스트(List)의 특징리스트(List) 사용 방법리스트(List) 예제리스트(List)란 저장된 요소들의 순서가 있고 데이터에 중복이 가능하고 인덱스(index) 번호에 의해서 정렬됩니다. (배
velog.io
'Back > Java' 카테고리의 다른 글
Java의 정석 [CHAPTER2. -4~8변수, 상수, 리터럴, 문자 리터럴VS문자열 리터럴, 문자열 결합] (0) | 2022.12.26 |
---|---|
Java의 정석 [CHAPTER1.-16 자주 발생하는 에러와 해결방법] (0) | 2022.12.26 |
[선택 정렬] 서치 정리 (0) | 2022.11.29 |
맥 A2141에 자바환경 삭제 후 재설치 오류 (0) | 2022.11.20 |
D+2 상수, 형변환 (0) | 2022.11.18 |