面试题答案
一键面试List特点
- 元素顺序:List 中的元素是有序的,即元素的插入顺序与存储顺序一致。可以通过索引访问元素,索引从0开始。
- 重复元素:允许重复元素存在。一个 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特点
- 元素顺序:Set 中的元素通常是无序的,即不能保证元素的存储顺序与插入顺序一致。不过,
LinkedHashSet
可以保持元素插入顺序,SortedSet
会根据元素的自然顺序或自定义比较器进行排序。 - 重复元素:不允许重复元素存在。如果试图向 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
}
}
区别总结
- 顺序方面:List 保证元素顺序,Set 通常无序(特殊实现除外)。
- 重复元素:List 允许重复元素,Set 不允许重复元素。