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)
}
输出:
相关文章
如何在 Java 中延迟几秒钟的时间
发布时间:2023/12/17 浏览次数:217 分类:Java
-
本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。
如何在 Java 中把 Hashmap 转换为 JSON 对象
发布时间:2023/12/17 浏览次数:187 分类:Java
-
它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。
如何在 Java 中按值排序 Map
发布时间:2023/12/17 浏览次数:171 分类:Java
-
本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map
进行排序,并列出了一些示例代码来理解它。
如何在 Java 中打印 HashMap
发布时间:2023/12/17 浏览次数:192 分类:Java
-
本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。
在 Java 中更新 Hashmap 的值
发布时间:2023/12/17 浏览次数:146 分类:Java
-
本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。
Java 中的 hashmap 和 map 之间的区别
发布时间:2023/12/17 浏览次数:79 分类:Java
-
本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,
在 Java 中获取用户主目录
发布时间:2023/12/17 浏览次数:218 分类:Java
-
这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。
Java 中 size 和 length 的区别
发布时间:2023/12/17 浏览次数:179 分类:Java
-
这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。
Java 中的互斥锁
发布时间:2023/12/17 浏览次数:111 分类:Java
-
了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,