class CustomCollection<T> : MutableCollection<T> {
private val backingList = mutableListOf<T>()
override val size: Int
get() = backingList.size
override fun isEmpty(): Boolean = backingList.isEmpty()
override fun contains(element: T): Boolean = backingList.contains(element)
override fun iterator(): MutableIterator<T> = backingList.iterator()
override fun add(element: T): Boolean = backingList.add(element)
override fun remove(element: T): Boolean = backingList.remove(element)
override fun containsAll(elements: Collection<T>): Boolean = backingList.containsAll(elements)
override fun addAll(elements: Collection<T>): Boolean = backingList.addAll(elements)
override fun removeAll(elements: Collection<T>): Boolean = backingList.removeAll(elements)
override fun retainAll(elements: Collection<T>): Boolean = backingList.retainAll(elements)
override fun clear() = backingList.clear()
}
设计思路解释
- 实现
MutableCollection
接口:这确保了自定义集合类与Kotlin现有的集合框架兼容。因为Kotlin标准库中的许多算法和函数都是基于MutableCollection
等接口来设计的,实现这个接口可以让我们的自定义集合无缝使用这些功能。
- 使用
mutableListOf
作为内部存储:选择mutableListOf
作为内部存储结构,是因为它已经实现了大部分集合操作的逻辑。我们通过委托的方式,将大部分方法调用转发给这个内部列表,这样可以减少代码冗余,同时利用mutableListOf
已有的优化和功能。
- 方法实现:
size
、isEmpty
、contains
等方法:直接调用内部列表的对应方法,将操作委托给内部列表。
add
、remove
方法:同样委托给内部列表,并且返回内部列表对应操作的结果,以符合MutableCollection
接口的定义。
addAll
、removeAll
、retainAll
等方法:也是委托给内部列表,这些方法对于确保自定义集合与标准库集合操作的兼容性至关重要。
clear
方法:直接调用内部列表的clear
方法清空所有元素。