迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

Kotlin中栈数据结构的使用

作者:迹忆客 最近更新:2023/05/10 浏览次数:

本篇文章我们就来学习一下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中栈数据结构的使用 - output one

如您所见,上面的代码示例创建了一个堆栈并添加了四个汽车品牌。 接下来,我们将看看使用一些预定义的函数来操作这个堆栈。

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中栈数据结构的使用 - output two

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中栈数据结构的使用 - output three

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中栈数据结构的使用 - output four

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"))

}

输出:

kotlin中栈数据结构的使用 - output five

在上面的输出中,第一个 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()

}

输出:

kotlin中栈数据结构的使用 - output six

因此,必须知道堆栈是否为空。 您可以使用下面给出的 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中栈数据结构的使用 - output seven


在 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中栈数据结构的使用 - output eight

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 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 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便