迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > 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 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Kotlin 中继承具有多个构造函数的类

发布时间:2023/05/12 浏览次数:200 分类: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 中填充二维数组。

Java 中的自然排序

发布时间:2023/05/01 浏览次数:137 分类:Java

Java 中最常用的顺序是自然顺序。 本文将展示如何使用 naturalOrder() 函数对数组进行排序。

扫一扫阅读全部技术教程

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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便