kotlin学习之集合(十三)

本文主要探讨了Kotlin中的集合,包括集合的两种类型:可变和不可变,以及其对应的List、Set、Map和Mutable版本。重点分析了迭代器的概念,解释了Iterable接口如何支持for...in遍历。此外,还介绍了抽象集合类如Collection和MutableCollection的特点,特别是contains方法的重载以及在迭代过程中删除元素的能力。最后,文章以MutableList为例,展示了具体集合类提供的实用函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录


首先,Kotlin的集合只有两种类型,可变类型和不可变类型,可变类型是在不可变类型前面加上Mutable:

  1. List和MutableList<E
  2. Set 和 MutableSet
  3. Map<K, out V> 和 MutableMap<K, V>

他们的类图如下:

在这里插入图片描述

首先,Iterable是所有集合的最上层,提供一个迭代器,可以看到iterator()方法的前缀是operator(重载运算符必须覆盖的方法),原来该方法是重载for循环中in关键字。也就是说,只要实现了Iterable接口,就能用for…in来遍历。

public interface Iterable<out T> {
    public operator fun iterator(): Iterator<T>
}

MutableIterable看起来跟Iterable相似:

public interface MutableIterable<out T> : Iterable<T> {
    override fun iterator(): MutableIterator<T>
}

值得一提的是,MutableIterable类上面有一段说明:

Classes that inherit from this interface can be represented as a sequence of elements that canbe iterated over and that supports removing elements during iteration.

这说明MutableIterable支持在迭代的过程中删除元素。

public interface Collection<out E> : Iterable<E> {

    public val size: Int

    public fun isEmpty(): Boolean

    public operator fun contains(element: @UnsafeVariance E): Boolean

    override fun iterator(): Iterator<E>

    public fun containsAll(elements: Collection<@UnsafeVariance E>): Boolean
}

值得注意的是contains方法用operator(重载运算符)修饰,所以它也是一种重载运算符,它重载了if判断中的in,也就是说重载contains才能使用if in。

基本只是一下普通的迭代,判断操作。而MutableCollection覆盖了Collection方法,并添加了一些操作集合的方法。

public interface MutableCollection<E> : Collection<E>, MutableIterable<E> {

    override fun iterator(): MutableIterator<E>

    public fun add(element: E): Boolean

    public fun remove(element: E): Boolean

    public fun addAll(elements: Collection<E>): Boolean

    public fun removeAll(elements: Collection<E>): Boolean

    public fun retainAll(elements: Collection<E>): Boolean

    public fun clear(): Unit
}

这里从List角度去看看有方便的函数可以用。

public interface List<out E> : Collection<E> {

    override val size: Int
    override fun isEmpty(): Boolean
    override fun contains(element: @UnsafeVariance E): Boolean
    override fun iterator(): Iterator<E>
    override fun containsAll(elements: Collection<@UnsafeVariance E>): Boolean

    public operator fun get(index: Int): E
    public fun indexOf(element: @UnsafeVariance E): Int
    public fun lastIndexOf(element: @UnsafeVariance E): Int
    public fun listIterator(): ListIterator<E>
    public fun listIterator(index: Int): ListIterator<E>
    public fun subList(fromIndex: Int, toIndex: Int): List<E>
}

MutableList只是多了一个removeAt方法

public fun removeAt(index: Int): E
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值