MST
星途 面试题库

面试题:Kotlin集合框架中List和Set的区别

请详细阐述Kotlin集合框架中List和Set的特点及区别,包括但不限于元素的顺序、是否允许重复元素,并且各举一个实际应用场景的例子。
12.0万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试

List特点

  1. 元素顺序:List 中的元素是有序的,即元素的插入顺序与存储顺序一致。可以通过索引访问元素,索引从0开始。
  2. 重复元素:允许重复元素存在。一个 List 中可以包含多个相同的元素。

实际应用场景:在音乐播放列表中,一首歌可能会被用户多次添加到播放列表中,而且播放顺序通常是按照添加顺序进行的。比如实现一个音乐播放列表类 MusicPlaylist,可以用 List 来存储歌曲:

class MusicPlaylist {
    private val songs: MutableList<String> = mutableListOf()

    fun addSong(song: String) {
        songs.add(song)
    }

    fun playPlaylist() {
        for (song in songs) {
            println("Now playing: $song")
        }
    }
}

Set特点

  1. 元素顺序:Set 中的元素通常是无序的,即不能保证元素的存储顺序与插入顺序一致。不过,LinkedHashSet 可以保持元素插入顺序,SortedSet 会根据元素的自然顺序或自定义比较器进行排序。
  2. 重复元素:不允许重复元素存在。如果试图向 Set 中添加已经存在的元素,添加操作将失败(不会抛出异常,但 add 方法会返回 false)。

实际应用场景:在统计网站访客 IP 地址时,不需要记录重复的 IP 地址,并且对顺序也没有特别要求。可以用 Set 来存储 IP 地址:

class VisitorIPTracker {
    private val visitorIPs: MutableSet<String> = mutableSetOf()

    fun trackIP(ip: String) {
        visitorIPs.add(ip)
    }

    fun getUniqueVisitorCount(): Int {
        return visitorIPs.size
    }
}

区别总结

  1. 顺序方面:List 保证元素顺序,Set 通常无序(特殊实现除外)。
  2. 重复元素:List 允许重复元素,Set 不允许重复元素。