篮子放鸡蛋-Scala实现自定义哈希散列
2021-05-06 本文已影响0人
量U移动广告归因
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()
}
}
}
}
}