Kotlin中栈数据结构的使用
本篇文章我们就来学习一下Kotlin中栈的使用。 我们还将看到用于更新和更改 Kotlin 堆栈的标准函数,包括 push、pop、peek、search 和 isEmpty。
我们还将研究比 Kotlin 中的堆栈更好的替代方案。
Kotlin 中的堆栈数据结构
栈是一种遵循后进先出(LIFO)机制的数据结构。 这意味着我们可以用它来创建一个包含多个对象的数据库。
堆栈的使用在 Java 中很突出,因为它是 Java 集合框架的一部分,但我们可以通过从 Java 导入 Stack 库在 Kotlin 中创建一个堆栈。
导入库后,我们可以创建堆栈并添加对象。 此示例创建一个名为 cars 的堆栈,然后使用 addAll() 方法添加汽车品牌名称。
import java.util.Stack
fun main(args: Array<String>){
var cars = Stack<String>();
cars.addAll(listOf("Mercedes-Benz", "BMW", "Ferrari", "Porsche"))
for(c in cars){
println(c)
}
}
输出:
如您所见,上面的代码示例创建了一个堆栈并添加了四个汽车品牌。 接下来,我们将看看使用一些预定义的函数来操作这个堆栈。
Kotlin 堆栈中的 push() 函数
push()
函数允许将新对象添加到堆栈。 添加的对象默认移动到堆栈的顶部。
在下面的示例中,我们将使用 push()
函数并将另一个对象添加到我们在上面创建的堆栈中。
import java.util.Stack
fun main(args: Array<String>){
var cars = Stack<String>();
cars.addAll(listOf("Mercedes-Benz", "BMW", "Ferrari", "Porsche"))
cars.push("Lamborghini")
for(c in cars){
println(c)
}
}
输出:
Kotlin 堆栈中的 pop() 函数
顾名思义,pop() 函数弹出最后添加到堆栈的元素。 因此,后进先出机制首先被删除,因为元素是最后添加的。
因此,考虑同一个例子,如果我们想删除堆栈顶部的对象,即 Lamborghini,我们可以使用 pop() 函数来实现。 这是相同的代码。
import java.util.Stack
fun main(args: Array<String>){
var cars = Stack<String>();
cars.addAll(listOf("Mercedes-Benz", "BMW", "Ferrari", "Porsche"))
cars.push("Lamborghini")
for(c in cars){
println(c)
}
var poppedCar = cars.pop()
println("\nThe car brand that is popped out is: " + poppedCar)
println("\nThe new list of car brands is: ")
for(c in cars){
print(c + ", ")
}
}
输出:
Kotlin 堆栈中的 peek() 函数
peek()
函数允许查看 Kotlin 堆栈。 这意味着我们可以在堆栈顶部找到对象而无需将其删除。
下面的示例显示了 peek()
函数。 接下来,我们将汽车品牌 Lamborghini 添加到堆栈中,并使用 peek()
函数打印它。
import java.util.Stack
fun main(args: Array<String>){
var cars = Stack<String>();
cars.addAll(listOf("Mercedes-Benz", "BMW", "Ferrari", "Porsche"))
cars.push("Lamborghini")
for(c in cars){
println(c)
}
var peekCar = cars.peek()
println("\nPeeked Car is: " + peekCar)
}
输出:
Kotlin 堆栈中的 search() 函数
如果要搜索栈中的特定元素,我们可以使用 search()
函数。 如果我们不确定它是否在堆栈中,我们也可以搜索一个对象。
如果搜索到的元素在堆栈中可用,则该函数将返回它在堆栈中的编号。 但如果该元素不可用,它将返回 -1。
让我们看一下这个例子,我们在汽车堆栈中搜索两个汽车品牌。 我们将寻找法拉利和吉普的元素。
import java.util.Stack
fun main(args: Array<String>){
var cars = Stack<String>();
cars.addAll(listOf("Mercedes-Benz", "BMW", "Ferrari", "Porsche"))
cars.push("Lamborghini")
for(c in cars){
println(c)
}
println("\nLooking for Ferrari: " + cars.search("Ferrari"))
println("Looking for Jeep: " + cars.search("Jeep"))
}
输出:
在上面的输出中,第一个 search()
函数返回 3,因为法拉利位于第 3 位。 但是第二个 search()
函数返回 -1,因为 Jeep 不在堆栈中。
Kotlin 堆栈中的 isEmpty() 函数
如果我们尝试在空堆栈上执行某些功能,则会抛出错误。 例如,在空堆栈上使用 pop() 函数会抛出 java.util.EmptyStackException。
import java.util.Stack
fun main(args: Array<String>){
var cars = Stack<String>();
cars.addAll(listOf())
var v = cars.pop()
}
输出:
因此,必须知道堆栈是否为空。 您可以使用下面给出的 isEmpty() 函数了解这一点。
import java.util.Stack
fun main(args: Array<String>){
var cars = Stack<String>();
cars.addAll(listOf("Mercedes-Benz", "BMW", "Ferrari", "Porsche", "Lamborghini"))
if(cars.isEmpty()){
println("This stack is empty")
}
else{
println("This stack is not empty")
}
}
输出:
在 Kotlin 中使用 ArrayDeque()
虽然堆栈是一种有用的数据结构,但不建议在 Kotlin 中使用它。 相反,建议使用 Deque。 Deque是双端队列的意思,既可以作为队列工作,也可以作为栈工作。
kotlin.collections.ArrayDeque
是在 Kotlin 1.3.70 中引入的。 下面介绍如何使用 Deque 代替 Kotlin 堆栈并执行与堆栈相同的操作。
import java.util.ArrayDeque
fun main(args: Array<String>){
var stackExample = ArrayDeque<String>()
stackExample.push("Mercedes-Benz")
stackExample.push("BMW")
stackExample.push("Ferrari")
stackExample.push("Porsche")
println(stackExample)
println("\n" + stackExample.isEmpty())
println("\n" + stackExample.pop())
println("\n" + stackExample)
stackExample.push("Lamborghini")
println("\n" + stackExample)
}
输出:
相关文章
在 Kotlin 中继承具有多个构造函数的类
发布时间:2023/05/12 浏览次数:200 分类:Java
-
本文讨论如何扩展具有多个构造函数的类。 构造函数是在创建对象时调用的函数,用于初始化类变量。在 Kotlin 中扩展具有多个构造函数的类
在 Kotlin 中将字符串转换为 Int 的不同方法
发布时间:2023/05/12 浏览次数:178 分类:Java
-
如果您正在构建接受多个参数的程序或应用程序,并且您希望确保只传递整数参数,则可以将 Kotlin 字符串转换为整数。
在 Java 中获取文件大小
发布时间:2023/05/01 浏览次数:139 分类:Java
-
Java 提供了不同的方法来获取文件的字节大小。 本教程演示了在 Java 中获取文件大小的不同方法。使用 Java IO 的文件类获取文件大小 Java IO 包的 File 类提供了以字节为单位获取文件大小的功能。
Java 中的文件分隔符
发布时间:2023/05/01 浏览次数:109 分类:Java
-
本篇文章介绍了 Java 中的文件分隔符。Java 中的文件分隔符 文件分隔符是用来分隔目录的字符; 例如,Unix 使用 /,Windows 使用 \ 作为文件分隔符。
Java 中的文件过滤器
发布时间:2023/05/01 浏览次数:194 分类:Java
-
本篇文章介绍如何在 Java 中使用 FileFilter。FileFilter 用于过滤具有特定扩展名的文件。 Java内置包IO和Apache Commons IO为FileFilter提供了类和接口来进行文件过滤操作。
Java 获取 ISO 8601 格式的当前时间戳
发布时间:2023/05/01 浏览次数:146 分类:Java
-
本篇文章介绍了 ISO 8601 日期格式、其重要性及其在 Java 中的使用。 它还列出了一些优点来强调为什么应该使用 ISO 格式来表示日期。
在 Java 中获取数组的子集
发布时间:2023/05/01 浏览次数:151 分类:Java
-
本篇文章介绍了几种在 Java 中获取数组子集的方法。使用 Arrays.copyOf() 方法获取数组的子集 使用 Arrays.copyOfRange() 方法获取数组的子集
用 Java 填充二维数组
发布时间:2023/05/01 浏览次数:116 分类:Java
-
二维数组是基于表结构的,即行和列,填充二维数组不能通过简单的添加到数组操作来完成。 本篇文章介绍如何在 Java 中填充二维数组。