class Employee
{
private String number; //工号
private String name; //姓名
private int age; //年龄
Employee(String number,String name,int age)
{
this.number = number;
this.name = name;
this.age = age;
}
void printAll()
{
System.out.println("number:" + number +" name:" + name + " age:" + age );
}
String getNumber()
{
return number;
}
}
class EmployeeNode
{
private Employee objEm;
private EmployeeNode nextEm; //指向下一个员工
EmployeeNode(String number,String name,int age)
{
objEm = new Employee(number,name,age);
nextEm = null;
}
void addNodeToNext(EmployeeNode objNode)
{
nextEm = objNode;
}
EmployeeNode getNext()
{
return nextEm;
}
String getNumber()
{
return objEm.getNumber();
}
void printAll()
{
objEm.printAll();
}
}
class HashEmployee
{
int arrayLength;
EmployeeNode[] emArray;
HashEmployee(int arrayLength)
{
emArray = new EmployeeNode[arrayLength];
this.arrayLength = arrayLength;
}
//从链表头部增加一个节点
void addNodeToHead(int arrayIndex,EmployeeNode emNode)
{
emNode.addNodeToNext(emArray[arrayIndex]);
emArray[arrayIndex] = emNode;
}
int addNode(EmployeeNode objNode)
{
int arrayIndex=0;
try{
//如果工号包含了非数字字符的时候,此行可能会有异常,所以要用try
//把工号字符串转换成整数
arrayIndex= Integer.valueOf(objNode.getNumber()).intValue();
}
catch(NumberFormatException e)
{
System.out.println(e);
return -1;
}
addNodeToHead(arrayIndex%this.arrayLength,objNode);
return 1;
}
//打印每个桶里面的所有元素
void printAllNodeForBucket(EmployeeNode objHeadEm)
{
EmployeeNode tempNode = objHeadEm;
while(null != tempNode)
{
tempNode.printAll();
tempNode = tempNode.getNext();
}
}
//从桶里面的安装工号查找某个节点
EmployeeNode FindNodeFromBucket(int arrayIndex,String number)
{
EmployeeNode tempNode=emArray[arrayIndex];
//把头部节点返回给函数调用,并且头部指向下一个节点
while(null != tempNode)
{
if(0 == tempNode.getNumber().compareTo(number))
break;
else
tempNode = tempNode.getNext();
}
return tempNode;
}
EmployeeNode FindEmployeeByNumber(String number)
{
int arrayIndex=0;
try{
//如果工号包含了非数字字符的时候,此行可能会有异常,所以要用try
//把工号字符串转换成整数
arrayIndex= Integer.valueOf(number).intValue();
}
catch(NumberFormatException e)
{
System.out.println(e);
return null;
}
return FindNodeFromBucket(arrayIndex % this.arrayLength,number);
}
void printAllNode()
{
for(EmployeeNode tempNode:emArray)
{
printAllNodeForBucket(tempNode);
}
}
}
public class Test009 {
public static void main(String[] args)
{
HashEmployee emHash= new HashEmployee(10);
//向员工树插入如下员工信息
emHash.addNode(new EmployeeNode("030","a",35));
emHash.addNode(new EmployeeNode("010","d",35));
emHash.addNode(new EmployeeNode("002","c",32));
emHash.addNode(new EmployeeNode("017","d",31));
emHash.addNode(new EmployeeNode("007","e",31));
emHash.addNode(new EmployeeNode("029","f",40));
emHash.addNode(new EmployeeNode("019","g",45));
emHash.addNode(new EmployeeNode("009","h",19));
//遍历员工哈希树
emHash.printAllNode();
EmployeeNode tempNode = emHash.FindEmployeeByNumber("014");
if(null != tempNode)
tempNode.printAll();
else
System.out.println("not found 014");
}
}
hash算法
最新推荐文章于 2024-05-17 11:47:20 发布