哈希表

 

 

package chapter06
import util.control.Breaks._
object test01 {

  def main(args:Array[String]):Unit={
    val hashTable = new HashTable(5)

    //创建EMP
    val emp1 = new Emp(5,"aa")
    val emp2 = new Emp(6,"bb")
    val emp3 = new Emp(7,"cc")
    val emp4 = new Emp(10,"dd")
    val emp5 = new Emp(14,"ee")
    val emp6 = new Emp(3,"ff")
    val emp7 = new Emp(1,"gg")

    hashTable.addEmp(emp1)
    hashTable.addEmp(emp2)
    hashTable.addEmp(emp3)
    hashTable.addEmp(emp4)
    hashTable.addEmp(emp5)
    hashTable.addEmp(emp6)
    hashTable.addEmp(emp7)
    hashTable.list()


    hashTable.findEmpById(10)
    hashTable.findEmpById(8)



  }

}










//Emp类
class Emp(empNo:Int,empName:String){
  val no = empNo
  var name = empName
  var next:Emp = null
}


//编写EmpLinkedList,存放雇员信息
class EmpLinkedList{
  var head:Emp = null

  //添加雇员(添加到最后)
  def addEmp(emp:Emp):Unit={
    if(head ==null){ //链表为空
      head = emp
    }else{
      var curEmp = head //定位到链表的最后
      breakable{
        while (true) {
          if (curEmp.next == null) {
            break()
          }
          curEmp = curEmp.next
        }
      }
      curEmp.next = emp
    }
    }

  //遍历链表
  def list(no:Int):Unit={
    //判断链表是否为空
    if(head == null){
      println("链表 "+no+" 为空,无法遍历")
      return
    }else{
      //辅助指针
      var curEmp = head
      print("链表 "+no+" 情况为 ")
      breakable {
        while (true) {
          printf("no=%d name=%s ==>", curEmp.no, curEmp.name)
          if (curEmp.next == null) {
            break()
          }
          curEmp = curEmp.next
        }
      }
    }
  }

  //查询一个雇员
  def findEmp(no:Int):Emp={
    var curEmp = head
    if (head ==null){
      println("链表为空,查询不到")
    }

    breakable {
      while (true) {
        if (curEmp.no == no) {
          break()
        }
        if (curEmp.next == null) {
          curEmp = null
          break()
        }
        curEmp = curEmp.next
      }
    }
    return curEmp


    }


}



//编写HashTable类
class HashTable(size:Int){
  val empLinkedListArr = new Array[EmpLinkedList](size)
  //需要将每个链表new
  for(i <- 0 until size){
    empLinkedListArr(i)=new EmpLinkedList()
  }
  //定义哈希方法(散列函数)
  def hash(no:Int):Int={
    no % size
  }

  //往数组添加链表元素
  def addEmp(emp:Emp):Unit={

    //数组Index
    var empLinkedListArrNo: Int = hash(emp.no)
    //链表添加元素
    empLinkedListArr(empLinkedListArrNo).addEmp(emp)
  }

  //遍历
  def list():Unit={
    for(i <- 0 until size){
      empLinkedListArr(i).list(i)
      println()
    }
  }


  //查找一个雇员
  def findEmpById(no:Int):Unit={
    //数组Index
    var empLinkedListArrNo: Int = hash(no)
    val emp: Emp = empLinkedListArr(empLinkedListArrNo).findEmp(no)
    if(emp != null){
      println("找到链表:"+empLinkedListArrNo+" id:"+emp.no +" 姓名: "+emp.name)
    }else{
      println("没有找到")
    }
  }
}

 

posted on 2020-08-28 15:49  happygril3  阅读(136)  评论(0)    收藏  举报

导航