一、可变集合与不可变集合有哪些?
Kotlin集合框架在kotlin.collections包内,如下:
接口:
Iterable<E>
与MutableIterable<E>
;Iterator<E>
与MutableIterator<E>
;Collection<E>
与MutableCollection<E>
;List<E>
与MutableList<E>
;Set<E>
与MutableSet<E>
;ListIterator<E>
与MutableListIterator<E>
;Map<E>
与MutableMap<E>
;
抽象类:
AbstractCollection<E>
与MutableAbstractCollection<E>
;AbstractIterator<E>
与MutableAbstractIterator<E>
;AbstractList<E>
与MutableAbstractList<E>
;AbstractSet<E>
与MutableAbstractSet<E>
;AbstractMap<E>
与MutableAbstractMap<E>
;
Kotlin集合框架只定义了接口和抽象类,没有定义具体实现类,具体实现都交由Java集合框架。
二、两者的区别
理解Kotlin集合,关键在于理解可变与不可变,指的是集合内部的元素和元素的组织方式,而不在于集合类型变量是val还是var。可变集合,变的是元素的值、集合内元素的排列、数量等。
Kotlin集合框架里,所有的可变集合都继承自相同的不可变集合。
不可变集合只能对元素进行读取和查询,可变集合才能对元素进行增减和赋值。
相对于Java集合,Kotlin的不可变集合只拥有一部分功能,可变集合才拥有完整的功能。