Kotlin中的集合分为两派:可变集合与不可变集合
所谓可变就是支持读、写、删,不可变只支持读
我们从下面详细对比中可以发现:
public interface Collection<out E> : Iterable<E>{...}
public interface MutableCollection<E> : Collection<E>, MutableIterable<E>{...}
public interface List<out E> : Collection<E> {...}
public interface MutableList<E> : List<E>, MutableCollection<E> {...}
public interface Set<out E> : Collection<E> {...}
public interface MutableSet<E> : Set<E>, MutableCollection<E>{...}
public interface Map<K, out V>{...}
public interface MutableMap<K, V> : Map<K, V> {...}
val emptyList = emptyList<String>() //创建空的List
val list = listOf<String>("132", "321", "liming") //创建普通的List
val mutList = mutableListOf<Int>(652, 123, 4564) //创建可修改的List
val emptySet = emptySet<String>() //创建空的Set
val set = setOf<String>("123", "3212", "sadsa") //创建一个普通的Set
val mutSet = mutableSetOf<Int>(123, 21, 852) //创建一个可变的Set
val hashSet = hashSetOf<Int>(123, 21, 852) //创建一个可变HashSet
val linkedSet = linkedSetOf<Int>(123, 21, 852) //创建一个LinkedHashSet
val sortedSet = sortedSetOf<Int>(123, 21, 852) //创建一个SortedSet
val emptyMap = emptyMap<Int, String>() //创建一个空的<Integer,String>的Map
val map = mapOf<Int, String>(1 to "haha", 2 to "lala") //创建一个普通的map
val mutMap = mutableMapOf<Int, String>(1 to "haha", 2 to "lala") //创建一个可变的map
val hashMap = hashMapOf<Int, String>(1 to "haha", 2 to "lala") //创建一个hashMap
val linkedMap = linkedMapOf<Int, String>(1 to "haha", 2 to "lala") //创建一个linkedMap
val sortedMap = sortedMapOf<Int, String>(1 to "haha", 2 to "lala") //创建一个sortedMap
to
并不是一个特殊的结果,而是一个普通的函数
接下来让我们看一下创建的对象类型:
println(list.javaClass) //class java.util.Arrays$ArrayList
println(set.javaClass) //class java.util.LinkedHashSet
println(map.javaClass) //class java.util.LinkedHashMap
如你所见,Kotlin并没有采用自己的集合类,而是采用标准的java集合类,这对java开发者来说是个好消息。
为什么Kotlin没有自己专门的集合类呢?
答: 因为使用标准的java集合类可以更好的和java交互。kotlin与java互调不用考虑集合类的转换。
尽管如此Kotlin并没有止步,而是在此基础上增加了很多方法,如: 获取列表中的最后一个元素,或者得到一个数字列表的最大值:
val strings = listOf<String>("first","second","third","last")
println(strings.last()) //输出 last
val numbers = setOf(1,11,-10,25,3,2)
println(numbers.max()) //输出 25
println(numbers.min()) //输出 -10
更多骚操作请关注后续文章。