美文网首页
篮子放鸡蛋-Scala实现自定义哈希散列

篮子放鸡蛋-Scala实现自定义哈希散列

作者: 量U移动广告归因 | 来源:发表于2021-05-06 13:46 被阅读0次
package com.datacrafts.datadvs.link

import scala.io.StdIn


/**
 * 存储数据的链表节点
 *
 * @param id
 * @param name
 */
class linkNode(val id:Int,val name:String){
    var next:linkNode = null
}

/**
 * 存储数据的链表
 */
class link{
    var head:linkNode = null
    var size:Int = 0

  /**
   * 添加链表节点
   * @param newNode
   */
    def add(newNode:linkNode): Unit ={
      var curr = head
      if(curr == null){
        head = newNode
      } else {
        while (curr.next != null) {
          curr = curr.next
        }
        curr.next = newNode
      }
      size += 1
    }

  /**
   * 遍历存储数据的链表
   */
    def list(): Unit = {
      var curr = head
      while (curr != null){
        printf("=>id=%d name=%s ",curr.id,curr.name)
        curr = curr.next
      }
      println()
    }

    /**
     * 根据ID查找节点
     * @param id
     */
    def findById(id:Int): linkNode = {
        var curr = head
        while (curr != null){
          if(curr.id == id){
            return curr
          }
          curr = curr.next
        }
        null
    }
}


/**
 * 自定义hashmap散列结构
 * 数据存储采用链表存储
 */
class hashMap(val size:Int) {
  val linkArr:Array[link] = new Array[link](size)
  for(index <- 0 until linkArr.length){
    linkArr(index) = new link()
  }

  /**
   * 往hashmap添加数据
   * @param id
   * @param name
   */
  def add(id:Int,name:String): Unit ={
    val hash = id % 5
    val node = new linkNode(id,name)
    linkArr(hash).add(node)
  }

  /**
   * 遍历整个hashmap
   */
  def list(): Unit ={
    for(i <- 0 until linkArr.length){
      linkArr(i).list()
    }
  }

  def findById(id:Int): linkNode ={
    val hash = id % 5
    val node = linkArr(hash).findById(id)
    node
  }
}


object hashMap{
  def main(args: Array[String]): Unit = {
    val hm = new hashMap(5)

    var key = ""
    while(true){
      println("add:添加成员")
      println("list:显示成员")
      println("其他:退出")
      key = StdIn.readLine()
      key match {
        case "add"=>{
          println("请输入ID")
          var id = StdIn.readInt()
          println("请输入姓名")
          var name = StdIn.readLine()
          hm.add(id,name)
        }
        case "list"=>{
          hm.list()
        }
        case _=>{
          sys.exit()
        }
      }
    }
  }
}

相关文章

  • 篮子放鸡蛋-Scala实现自定义哈希散列

  • Hash Table基础

    目录 1.1 什么是哈希Hash? 哈希表的实现 称之为 哈希,抑或 散列。(雜湊 For 台灣 )哈希表在【平均...

  • 算法笔记(二)

    二分搜索、哈希表 散列表的实现叫做散列,散列是一种用来以常数平均时间执行插入,删除和查找的技术。 散列函数 解决冲...

  • 哈希表

    哈希=散列哈希法=散列法,对应的哈希表=散列表什么是哈希法?哈希法思想:首先在元素的关键字k和元素的存储位置p之间...

  • 散列--哈希

    一、散列表:哈希表 散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而...

  • Java类集框架

    学习集合之前复习相关知识: Hash:翻译为散列、哈希,所以散列和哈希指的是同一个概念。散列码:一种标识码,由散列...

  • “资产”究竟有没有配置商业保险的必要!

    鸡蛋不能放在一个篮子里,并且篮子里不要只放鸡蛋,但是鸡蛋到底怎么放?每个篮子又放多少鸡蛋?大家请看图说话。 由初中...

  • 剖析HashMap(1.7)

    一、哈希? hash,散列,直译为哈希。哈希表,即为散列存储结构,给定一个key值,通过一定的哈希算法f(x),得...

  • 哈希算法

    一,概念 前面涉及到散列表,散列函数,散列算法。那么和哈希算法又是什么关系,其实散列函数对应的算法就是哈希算法。 ...

  • 漫谈散列函数

    说到散列,一般对应于散列表(哈希表)和散列函数。我们今天不谈哈希表,仅谈下散列函数。 定义 引一段百度百科关于散列...

网友评论

      本文标题:篮子放鸡蛋-Scala实现自定义哈希散列

      本文链接:https://www.haomeiwen.com/subject/cwqddltx.html