[코틀린 완전정복] Array VS ArrayList

Dohyeon Ko·2021년 10월 8일
1

코틀린

목록 보기
7/7
post-thumbnail
post-custom-banner

오늘Kotlin으로 완전탐색 문제를 풀다가 빡쳐서 정리하는 글이다. 1학년 이후로 자바 안써서 그런가 파이썬에 너무 익숙해진 탓에 자료형에서 애먹었다... 파이썬 쓸 때는 그냥 다 [] 이렇게 좌우 꺽쇄로 배열, 리스트 모두 다 해결했었는데 말이다. 원소 추가할 때는 묻지도 따지지도 않고 append()... 아무튼 이런 단순한 파이썬에 적응해버린 탓인가 간단한 배열문제였는데 너무 오래걸렸다. 그래서 배열, 리스트에 관한 정리!

Array

Array add, plus

array는 add를 지원하지 않는다. 대신에 plus를 지원한다. return 값이 있으므로 left value가 필요하다.

// plus는 return 값이 있음. 따라서 left value가 필요함.
array = array.plus(4)
// 아래처럼 코드를 작성하면 원소가 추가되지 않음.
array.plus(5)

Array slice

array는 slice를 지원한다. slice 메소드의 return 값이 List<T> 이므로 형 변환이 필요하다. .toTypedArray()

array = array.slice(0..1).toTypedArray()

Array sort

array는 sortedArray 로 정렬이 가능하다. sortedArrayDescending, sortedArrayWith 모두 가능. return 값이 있으므로 left value가 필요하다.

array = array.sortedArray()
// 아래처럼 코드를 작성하면 정렬이 되지 않음.
array.sortedArray()

ArrayList

ArrayList add, plus

arrayList는 add와 plus를 모두 지원한다. 단, plus는 return 값이 있으므로 left value가 필요하다. return 값이 List<T> 이므로 추가적으로 형변환이 필요하다. as ArrayList<Int>

arrayList.add(4)
// 아래처럼 코드를 작성하면 원소가 추가되지 않음.
arrayList = arrayList.plus(5) as ArrayList<Int>

ArrayList remove

array와 다르게 arrayList는 remove를 지원한다. 처음 등장한 원소를 제거하며 복수의 원소를 삭제하기 위해선 removeAll 을 사용한다.

arrayList.remove(1)
arrayList.removeAll(arrayOf(1))

ArrayList slice

arrayList는 slice를 지원한다.
slice 메소드의 return 값이 List<T> 이므로 추가적으로 형 변환이 필요하다. as ArrayList<Int>

arrayList = arrayList.slice(0..1) as ArrayList<Int>

ArrayList sort

arrayList는 sort 로 정렬이 가능하다. sortByDescending 가능. array와 다르게 return 값이 없고 원본 배열 자체를 정렬한다.

arrayList.sort()
arrayList.sortByDescending { it.absoluteValue }

이 말고도 array와 arrayList 모두 존내 다양한 메소드를 제공한다. first(), last()...

정리

array와 arrayList의 차이는 원본을 변경할 수 있냐 없냐의 차이?이다. 가령 원본을 변경할 수 있는 arrayList의 경우 add와 remove를 제공한다. 애초에 return 값이 없는 메소드이다. 따라서 원본을 변경할 수 없는 array의 경우 두 개의 메소드를 사용할 수 없는 것이다. list와 mutableList까지 한 번에 정리할랬는데 다른 게시글로 나눠서 작성해야겠다.

번외 : IntArrayArray<Int>, ArrayList<Int> 는 다르다. 요것도 다음에 정리.

profile
티스토리로 옮겼어요! (https://codekodo.tistory.com)
post-custom-banner

0개의 댓글