1. Array
하나의 변수에 여러 값을 저장하기 위해 연속된 메모리 공간을 차지하는 정적 자료구조
1.1 특징
- 선언과 동시에 크기가 정해진다
- 다른 타입을 한 배열에 넣을 수 있다
- 메모리 공간에 연속적으로 저장된다
- 선언 후 배열의 크기를 변경할 수 없다 (값의 변경은 가능)
- 요소를 삭제해도 크기가 고정이라 메모리가 낭비된다
1.2 사용예제
1.2.1 배열 선언하기
1
2
3
4
5
6
| //기본타입 배열 선언
var charArray = CharArray(10) //10칸짜리 Char 타입 배열 생성
var intArray = IntArray(10) //10칸짜리 Int 타입 배열 생성
//빈 문자열 배열 선언(string은 기본타입이 아님)
var stringArray = Array(10, {item->""}) //10칸짜리 String 타입 배열 생성
|
1.2.2 배열에 값 추가하기
array는 plus를 사용하여 배열에 값을 추가한다. add는 지원하지 않음
plus 는 return 값이 있기 때문에 left value가 있어야한다.
기존배열에 값을 추가하는 것이 아닌 기존배열의 요소와 새로운 값을 추가하여 새로운 배열을 만드는 것
1
2
3
4
5
| var array = arrayOf(1,2,3)
array = array.plus(4) // 그냥 array.plus(4)라고 작성하면 추가 안됨
//result : [1,2,3,4]
|
1.2.3 배열 요소 접근
1
2
3
4
5
| val intArray : Array<Int> = arrayOf(1,2,3)
intArray[0] // 1
intArray[1] // 2
intArray[2] // 3
|
1.2.4 배열 출력
1
2
3
4
5
| var array = arrayOf(1,2,3)
var array2 = arrayOf(arrayOf(1, 2, 3), arrayOf(4, 5, 6))
println(Arrays.toString(array))
println(Arrays.deepToString(array2))
|
2. List
하나의 변수에 여러값을 저장하기 위해 불연속적인 메모리 공간을 차지하는 동적 자료구조
2.1 특징
- 순서가 있는 자료형의 집합이다
- 포인터를 통해 값에 접근이 가능하다
- 동적 타입이다.
- 메모리 관리가 편리하다.
- List 안의 내용을 수정할 수 없다.
- 검색성능이 좋지 않다.
2.2 사용예제
2.2.1 List 선언
1
2
3
4
5
| val list = listOf(1,2,3)
val intList : List<Int> = listOf(1,2,3)
val stringList = List<String> = listOf("A","B","C")
|
2.2.2 리스트 요소 접근
1
2
3
4
5
| val list = listOf(1,2,3)
list.get(0) // 1
list.get(1) // 2
list.get(2) // 3
|
2.2.3 리스트를 배열로 변환
1
2
3
| val list = listOf("A", "B", "C")
var array = list.toTypedArray() //list -> array 변환
|
3. ArrayList
Array의 유용한 특징을 가져와 만든 List
3.1 특징
- List지만 연속된 메모리 공간을 차지하는 Array 형태를 띄고 있다
- 자유롭게 요소를 추가하거나 삭제할 수 있다.
3.2 사용예제
3.2.1 선언
1
2
3
4
5
6
7
| val arrayList1 : arrayList<Int> = arrayListOf(1,2,3)
val arrayList2 = arrayList<Int>()
val arrayList3 : arrayList<String> = arrayListOf("가","나","다")
val arrayList4 = arrayList<String>()
|
3.2.2 값 추가
1
2
3
4
5
6
7
| val arrayList = arrayList<Int>()
arrayList.add(1)
arrayList.add(2)
arrayList.add(3)
//result : {1,2,3}
|
3.2.3 값 삭제
1
2
3
| val arrayList = arrayList<Int>(1,2,3)
arrayList.removeAt(0) //{2,3}
|
전체적으로 비교해 봤을때 array와 List의 가장 큰차이점은 사이즈 변경의 유무가 제일 크다.
사이즈를 동적으로 사용하고 싶다면 array가 아닌 List를 사용하자
array의 요소를 삭제하고 싶으면 arrayList로 변경해서 삭제 후 다시 array로 변경