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
}

总结

以后写

后续

代码没写完,后面补上

相关推荐
一笑的小酒馆1 小时前
Android中的tcp通信
android
默阳12345 小时前
2026年Android中高级面试题专栏(Android进阶篇)
android
古法安卓5 小时前
Android-日志系统源码解析
android·java·android studio
恋猫de小郭6 小时前
Android 17 + OkHttp 5.5.0 ,全新 ECH 下你的 HTTPS 域名可以请求时被安全隐藏
android·前端·flutter
小强闯江湖6 小时前
不只是让 AI 写代码:ViewCompose 把 Android UI 做成了可编译、可渲染的闭环
android·人工智能·kotlin
hunterandroid8 小时前
StateFlow 与 SharedFlow 的边界:状态与事件的正确建模
android·前端
YF02118 小时前
Android遥控器对频详解
android·android things
码农coding9 小时前
android12 WindowManagerService窗口的布局过程
android·源码
杉氧11 小时前
状态管理变迁史:为什么我们放弃了 Redux 选择 Zustand?
android·前端·react native
Interview Aid11215 小时前
TikTok OA 四题分享|半小时内 AC,题目基本都是实现题
java·开发语言·算法·面试·职场和发展