자료구조로서의 배열과 리스트
배열(Array)
- 처음부터 크기가 정해져 있음 -> 실제 데이터의 개수와 상관없이 지정한 크기만큼의 메모리가 사용됨
- 인덱스 사용 가능
- 데이터 중복 허용
- 검색 O(1), 추가/삭제 O(n)
순차 리스트(Sequential List)
- 배열의 문제점(데이터가 저장되지 않았는데도 메모리가 낭비되는 것)을 해결하기 위한 자료구조
-> 배열과 아주 유사하지만 데이터를 빈틈없이 채운다는 것이 특징
- 인덱스 사용 가능
- 데이터 중복 허용
연결 리스트(Linked List)
- 한 노드는 실제 데이터를 저장하는 공간과 다음 노드의 위치를 저장하는 공간으로 구성되어 있음
- 메모리의 공간을 연속적으로 사용할 필요가 없음(물리적 연결 X, 논리적 연결 O)
- 검색 O(n), 추가/삭제 O(1)
프로그래밍 언어(자바)에서의 배열과 리스트
자바에서의 배열
int[] array = new int[length]
: length만큼의 정수형 array 선언
array[index] = data
: array의 index에 data 삽입
variable = array[index]
: array의 index번째 값 확인(variable이라는 변수에 넣음)
array[index] = null
: array의 index번째 값 삭제(출력 시 해당 index의 값이 null로 출력됨)
배열 출력 시 주의 사항
System.out.print(array)
입력 시 알 수 없는 문자열이 나옴
-> array가 가리키고 있는 메모리 주소이 출력되는 것
따라서 반복문으로 값을 차례차례 출력하거나 toString()
메소드 사용해야 내용을 출력할 수 있음
e.g. System.out.println(Arrays.toString(array)
(해당 메소드를 쓰려면 java.util.Arrays
를 import해야 함
자바에서의 리스트(ArrayList)
Collection Framework 중 java.util package
가변 크기 배열
선언
ArrayList<String> list = new ArrayList<>();
: list라는 이름의 String 자료형을 담을 리스트 선언
ArrayList<Integer> list = new ArrayList<Integer>(5);
: 초기 용량 지정
- list의 초기 용량 지정은 필수가 아님! (가변 크기 배열)
ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1, 2, 3, 4));
: 초기 값과 함께 list라는 이름의 리스트 선언
추가
list.add(data)
: list에 data 추가
list.add(index, data)
:list의 index번째 인덱스에 data 추가
list1.addAll(list2)
: list1에 list2의 내용 모두 추가
확인/검색
list.get(index)
: list의 index번째 인덱스의 값을 가져옴
list.size()
: list의 크기 확인
list.contains(data)
: list에 data가 있는지 검색
list.indexOf(data)
: list에 data가 있는지 검색하고 index를 return(찾는 값이 없으면 -1)
list.lastIndexOf(data)
: list에 data가 있는지 뒤쪽부터 검색하고 index를 return(찾는 값이 없으면 -1)
list.isEmpty()
: list가 비어 있는지에 대해 True/False를 return
변경
list.set(index, data)
: list의 index번째 인덱스의 값을 data로 변경
삭제
list.remove(index)
: list의 index번째 값 삭제
list.remove(data)
: (data로 값을 구분할 수 있는 경우) list의 data 삭제
list.clear()
: list의 모든 값 초기화
ArrayList Code Example 코드 예제
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
List<Integer> array = new ArrayList<>(); // 정수 타입의 어레이 선언
array.add(3); // array에 3 추가: [3]
array.add(0, 0); // array의 0번 인덱스에 0 추가: [0, 3]
array.add(5); // [0, 3, 5]
array.set(1, 4); // 1번 인덱스의 값을 4로 변경: [0, 4, 5]
array.remove(2); // 2번 인덱스의 값 삭제: [0, 4]
array.clear(); // 모두 삭제: []
}
}
참고:
'Programming Language > Java' 카테고리의 다른 글
[Java] 백준 BOJ 10807: 개수 세기 (0) | 2023.11.02 |
---|---|
[Java] ArrayList로 입력 받기, nextInt에 관한 고찰 (0) | 2023.11.02 |
[Java] 백준 BOJ 10950: A + B - 3 (1) | 2023.10.18 |
[Java] 백준 BOJ 10869: 사칙연산 (0) | 2023.09.20 |
[Java] 백준 BOJ 10699: 오늘 날짜 (0) | 2023.09.05 |