kotlin实现HashMap

前言

省略

代码

kotlin 复制代码
class MyHashMap {

    data class Node(
        var key: Int, var value: Int, var next: Node? = null
    )


    // 负载因子
    private var loadFactor = 0.75

    // 当前大小
    private var size = 0

    private var table = Array<Node?>(16) {
        null
    }

    // 增加
    fun put(key: Int, value: Int) {
        // hash确定下标
        val n = key.hashCode() % table.size
        if (table[n] == null) {
            table[n] = Node(key, value)
        } else {
            // 找到最后一个
            var e = table[n]
            while (e != null) {
                // 替换
                if (e.key == key) {
                    e.value = value
                    break
                }
                if (e.next == null) {
                    e.next = Node(key, value)
                    break
                }
                e = e.next
            }
        }
        // 扩容
        if (++size > table.size * loadFactor) {
            resize()
        }
    }

    // 删除
    fun remove(key: Int): Node? {

        return null
    }

    // 查
    fun get(key: Int): Node? {

        return null
    }

    // 二倍扩容
    private fun resize() {
        // 数组扩容到2倍
        val oldCap = table.size
        val newCap = table.size * 2
        val newTable = Array<Node?>(newCap) {
            table.getOrNull(it)
        }
        table = newTable
        // 转移
        for (i in 0 until oldCap) {
            var lowHead: Node? = null
            var lowTail: Node? = null
            var highHead: Node? = null
            var highTail: Node? = null
            var e = table[i]
            while (e != null) {
                if (e.key and table.size == 0) {
                    if (lowHead == null) {
                        lowHead = e
                    } else {
                        lowTail?.next = e
                    }
                    lowTail = e
                } else {
                    if (highHead == null) {
                        highHead = e
                    } else {
                        highTail?.next = e
                    }
                    highTail = e
                }
                e = e.next
            }
            lowTail?.next = null
            highTail?.next = null
            table[i] = lowHead
            table[table.size / 2 + i] = lowTail
        }
    }

    fun size() = size
}

总结

以后写

后续

代码没写完,后面补上

相关推荐
Source.Liu11 分钟前
【用Rust写CAD】第二章 第四节 函数
开发语言·rust
monkey_meng11 分钟前
【Rust中的迭代器】
开发语言·后端·rust
余衫马14 分钟前
Rust-Trait 特征编程
开发语言·后端·rust
monkey_meng18 分钟前
【Rust中多线程同步机制】
开发语言·redis·后端·rust
Jacob程序员20 分钟前
java导出word文件(手绘)
java·开发语言·word
小白学大数据27 分钟前
正则表达式在Kotlin中的应用:提取图片链接
开发语言·python·selenium·正则表达式·kotlin
VBA633728 分钟前
VBA之Word应用第三章第三节:打开文档,并将文档分配给变量
开发语言
半盏茶香29 分钟前
【C语言】分支和循环详解(下)猜数字游戏
c语言·开发语言·c++·算法·游戏
problc32 分钟前
Flutter中文字体设置指南:打造个性化的应用体验
android·javascript·flutter
落落鱼201341 分钟前
tp接口 入口文件 500 错误原因
java·开发语言