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
}

总结

以后写

后续

代码没写完,后面补上

相关推荐
数据小爬虫@2 小时前
深入解析:使用 Python 爬虫获取苏宁商品详情
开发语言·爬虫·python
健胃消食片片片片2 小时前
Python爬虫技术:高效数据收集与深度挖掘
开发语言·爬虫·python
王老师青少年编程3 小时前
gesp(C++五级)(14)洛谷:B4071:[GESP202412 五级] 武器强化
开发语言·c++·算法·gesp·csp·信奥赛
水瓶丫头站住4 小时前
安卓APP如何适配不同的手机分辨率
android·智能手机
一只小bit4 小时前
C++之初识模版
开发语言·c++
xvch4 小时前
Kotlin 2.1.0 入门教程(五)
android·kotlin
王磊鑫4 小时前
C语言小项目——通讯录
c语言·开发语言
钢铁男儿5 小时前
C# 委托和事件(事件)
开发语言·c#
Ai 编码助手5 小时前
在 Go 语言中如何高效地处理集合
开发语言·后端·golang
喜-喜5 小时前
C# HTTP/HTTPS 请求测试小工具
开发语言·http·c#