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
}

总结

以后写

后续

代码没写完,后面补上

相关推荐
leo__5209 小时前
MATLAB实现牧羊人算法
开发语言·算法·matlab
格发许可优化管理系统10 小时前
Mentor许可证使用规定全解析
java·大数据·c语言·开发语言·c++
墨狂之逸才10 小时前
Android 保活机制详解 —— 从概念到实践
android
FL162386312910 小时前
C# OpenCvSharp 基于霍夫变换直线检测的文本图像倾斜校正文本图像倾斜校
开发语言·c#
故渊at10 小时前
第二板块:Android 四大组件标准化学理 | 第十二篇:四大组件全景总结与系统服务(System Server)架构
android·架构·wpf·四大组件·system service
techdashen10 小时前
在 Fly.io 上使用 Rust 构建远程开发环境:从 Tokio 到 eBPF
开发语言·后端·rust
留白_10 小时前
pandas文件读取与存储
开发语言·python·pandas
问心无愧051310 小时前
ctf sow web入门112
android·前端·笔记
夕除10 小时前
AOP 实现 Redis 缓存切面解析
java·开发语言·python
feifeigo12310 小时前
马尔可夫决策过程(MDP)MATLAB 实现
开发语言·matlab