반응형
[Kotlin] Collection 정리 list, set, map 차이 - HashMap, HashMapOf, MutableMap, SetOf, MutableSetOf, ArrayListof, ListOf
- HashMap, hashmapof, mutableMap, setOf, mutableSetOf, ArrayListof, listof 들의 공통점은 모두 Collection이라는 점입니다.
- collection은 데이터를 모아 관리와 사용을 편리하게 하기 위해 만들어진 프레임워크입니다.
- Collection들을 이해하기 전 Collection을 구분 짓는 법부터 알아야 합니다.
- 코틀린은 크게 변경 가능한(Mutable), 변경 불가능한(Immutable) Collection으로 나눕니다.
- 그리고 그아래 List Map Set 3가지 가있습니다. 이 셋의 차이를 먼저 알아보겠습니다.
List, Map, Set 차이
List
- list는 Array같이 안에 값이 있는 리스트입니다. 아래는 list사용 예입니다.
- 아래와 같이 list안에 string이나 Int가 들어갈 수 있고 ListOf를 쓰면 읽기만 가능한 array가 만들어지고
- arraylistOf로 만들어주면 편집이 가능해집니다.
//변경 불가능
val names = listOf("Sean","John") //읽기만 가능합니다.
//변경 가능
val names = arraylistOf("Sean","John","James")
names.add("Tom") // 이렇게 추가할수있습니다.
Map
- Map은 data structure중의 하나로 key-value 두 개로 구성된 페어로 나타낼 수 있는 collection입니다. 아래는 사용 예제입니다.
- Key와 value값으로 데이터가 이루어져 있기는데 만약 Key Value값 둘 다 같은 값이 있다면 어떻게 될까요?
- 불가능합니다. Map에서는 key는 중복될 수 없고 value는 중복될 수 있습니다. eg. "hi" to 26, "bye" to 26"와 같이 value가 중복될 수는 있습니다.
//변경불가능한 map 사용 예제 - 사이즈가 변할수없고 읽기만 가능합니다.
fun main(){
//map은 "key" to value 형식으로 데이터를 저장합니다.
val ageMapper = mapOf("himanshu" to 26, "john" to 30) //이제부터 변경 불가능합니다.
println(ageMapper[himanshu]) //ageMapper안에 이름을 써주면 vale값인 26을 리턴합니다.
println(ageMapper.size) //2를 리턴합니다.
ageMapper.put //read only기 때문에 map에 추가할수없습니다.
//변경 가능한 맵의 사용 예제
val newAgeMapper = mutuableMapOf("himanshu" to 26, "john" to 30)
newAgeMapper.put("Doe", 35) //이렇게하면 Doe가 추가되게됩니다.
newAgeMapper.clear() //newAgeMapper안에있는 모든 값을 삭제합니다.
newAgeMapper.remove("himanshu") // "himanshu"라는 키값을 가진 것을 제거해줍니다.
//get하고 없으면 default가져오기
println(newAgeMapper.getOrDefault("Kasdfadf",-1)) //Kasdfadf가있는지확인하고 없으면 -1을 default값으로 가져옵니다.
//read
//값이있는지 없는지 확인할수있습니다.
println(newAgeMapper.containsKey("himanshu")) //true
println(newAgeMapper.containsValue(30))// true
println(newAgeMapper.filter{
it.key == "himanshu" || it.value == 30 // himanshu라는 키를 가지고있거나, value로 30일 가지고있는 아이템을 리턴합니다. {himanshu = 26, john = 30}
})
println(newAgeMapper.filterKeys{
it == "himanshu" //himanshu를 key로 가지고있는값을 찾습니다.
})
println(newAgeMapper.filterValues{
it == 30 //30을 value로 가진 값을 찾습니다.
})
//sorting
newAgeMapper.toSortedMap() // key값을 순서대로 재배열합니다. 알파벳이나 숫자 차례대로 재배치합니다.
}
Set
- List와 달리 중복을 허용하지 않으며, 순차적이지 않은 집합입니다.
val set1 = setOf<Int>(3,3,1,2)
println(set1) // [3,1,2]가 나옵니다.
Collection 구성
변경 불가능한 데이터 (Immutable Collections)
변경 불가능한 데이터 (Immutable collections) Read-Only |
구성 |
Immutable list | listOf |
Immutable map | mapOf |
Immutable set | setOf |
- 위에서 이 3가지는 모두 예시로 이용해보았기 때문에 부가 설명을 스킵하겠습니다.
변경 가능한 데이터 (Mutable Collections)
변경 가능한 데이터(Mutable collections) Read and Write |
구성 |
Mutable list | ArrayListOf, ArrayList, mutableListOf |
Mutable map | MutableMapOf, HashMap, HashMapOf |
Mutable set | MutuableSetOf, HashSetOf |
- 초록색 위에 예시로 다뤄본 내용
- 빨간색 다뤄보지 않은 내용
Mutable List
- ArrayList: ArrayList는 ArrayListOf와 같습니다. 코드로 설명하자면 쓰는 방식이 다를 뿐 둘은 같은 코드입니다.
- Kotlin 공홈에 가보면, ArrayList는 MutableList 인터페이스를 상속받은 구현체라고 설명돼있습니다.
public inline fun <T> arrayListOf(): ArrayList<T> = ArrayList()
- mutableListOf: 이 또한 ArrayListOf와 같습니다. 이 세 가지 모드 mutable List를 만들기 위한 방법입니다.
Mutable Map
- MutableMapOf, HashMap, HashMapOf는 모두 같은 기능입니다.
- HashMap은 MutableMap 인터페이스를 상속받은 구현체입니다.
- HashMap 사용 예제를 살펴보겠습니다.
val hashMap:HashMap<Int,String> = HashMap<Int,String>() //빈 hashMap을 생성해준후
hashMap.put(1,"Ajay") //이렇게 추가할수있습니다.
hashMap.put(3,"Vijay")
hashMap.put(4,"Praveen")
hashMap.put(2,"Ajay")
Mutable Set
- MutableSetOf, HashSetOf 둘은 같은 기능입니다.
- HashSetOf도 MutableSetOf 인터페이스를 상속받은 구현체입니다.
이렇게 변경가능한지 변경불가능한지 구별하고, list, set, map을 구별하면 어떤 Collection을 이해하는데 도움이 될것입니다.
반응형