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
}

总结

以后写

后续

代码没写完,后面补上

相关推荐
JienDa3 分钟前
JienDa聊PHP:小红书仿站实战深度架构全解析
开发语言·架构·php
d***9351 小时前
springboot3.X 无法解析parameter参数问题
android·前端·后端
执笔论英雄4 小时前
Slime异步原理(单例设计模式)4
开发语言·python·设计模式
e***74956 小时前
Modbus报文详解
服务器·开发语言·php
lly2024066 小时前
ASP 发送电子邮件详解
开发语言
小徐敲java6 小时前
python使用s7协议与plc进行数据通讯(HslCommunication模拟)
开发语言·python
likuolei6 小时前
XSL-FO 软件
java·开发语言·前端·数据库
6***37946 小时前
PHP在电商中的BigCommerce
开发语言·php
Dev7z6 小时前
基于Matlab的多制式条形码识别与图形界面(GUI)系统设计与实现
开发语言·matlab
合作小小程序员小小店6 小时前
桌面开发,在线%信息管理%系统,基于vs2022,c#,winform,sql server数据。
开发语言·数据库·sql·microsoft·c#