第五章 集合
Kotlin中集合分为可变集合(可以增删改查)和只读集合(只能读取元素,去掉了增、删、改的功能);(注意:这儿只读集合并不等同于不变集合,是可以改变的)如:
val wirteList:MutableList<Int>=mutableListof(1,2,3);
vatl readList:List<Int>=writeList
writeList[0]=4
MutableList是List的子类,所以List是MutableList的父类,这儿readList与writeList指向的同一个对象,当writeList改变了第一个元素,readList指向的元素也就改变了,所以说:只读集合是可以改变的
Kotlin中集合仍然由Collection和Map这两个根集合接口派生子接口的
Kotlin在JVM中并未真正去实现HashSet、LinkedHashSet、linkedList、ArrayList等这些类,只是为Java中的这些类指定了一个类型别名,而直接借用了这些集合类,为他们扩展了更多方法;
1、set集合
Kotlin不推荐使用构造器创建集合对象,而是推荐使用Kotlin提供的工具函数来创建集合;
创建不可变Set集合:
setOf(元素1,元素2…):实际创建的LinkedSet集合对象
创建可变Set集合:
hashSetOf(…)
linkedSetOf(…)
mutableSetOf(…):创建可变的MutableSet集合
sortSetOf():创建可变的TreeSet集合。
1.1、使用set集合
提供的许多方法和Array功能相似如:
1.2、遍历Set
for(i in set){
}
由于Set集合继承了Iteratable,因此可以使用该接口定义的forEach()方法来遍历集合
set.forEach(){
println(it)
}
前面我们说setOf()返回的LinkedSet(有序的),因此可以通过Set集合提供的indices
//遍历Set集合
fun iterateSet(){
val set = setOf<String>("java","kotlin")
for (i in set.indices){
println(set.elementAt(i))
}
}
不可变的Set的iterator()方法返回的是Iterator对象,该对象有hasNext()和next()两个方法;而MutableSet的iterator()方法返回的MutableIterator,除了这两个方法,还提供了一个remove方法,该方法用于在遍历是删除对象;
注意:MutableIterator才相当于Java中的Iterator;
结论:不可变Set集合,遍历是不能删除元素;可变Set集合遍历时才可以删除集合元素;