本文共 2985 字,大约阅读时间需要 9 分钟。
哈希表(HashTable)又称散列表,是根据关键码进行数据访问的一种数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
哈希表有多种实现结构:数组+链表,数组+二叉树。这里用数组+链表来实现哈希表
数组+链表的形式,实际上就是一个链表数组。而添加数据时,只要根据填入数据的id,通过取特征码运算,获取一个特征码,添加链表节点的数组位置索引,就是这个特征码。其余操作与去前面所说的链表,数组几乎一样。下面的代码中,采用 单向-无头-普通类-循环 的链表来作为存储结构。
代码实现:
package cn.dataStructureAndAlgorithm.demo.HashTable;import java.util.Scanner;class Node{ private int id; private String data; private Node next; public Node(int id, String data) { this.id = id; this.data = data; } public int getId() { return id; } public String getData() { return data; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } @Override public String toString() { return "Node{" + "id=" + id + ", data='" + data + '\'' + '}'; }}class LinkList{ private Node root; public void add(Node node){//无序添加 if (root==null){ this.root=node; return; } Node temp=this.root; while (temp.getNext()!=null){//找到链表尾 temp=temp.getNext(); } temp.setNext(node); } public void show(){ if (root==null){ System.out.println("链表为空"); return; } Node temp=root; while (temp!=null){ System.out.print(" =>"+temp); temp=temp.getNext(); } System.out.println(); } public Node find(int id){ if (root==null){ return null; } Node temp=this.root; while (true){ if (temp.getId()==id){//找到 break; } if (temp.getNext()==null){//未找到 temp=null; break; } temp=temp.getNext(); } return temp; } public void delete(int id){ if (root==null){ System.out.println("链表为空"); return; } if (root.getId()==id){//删除根节点 this.root=this.root.getNext(); }else {//删除子节点 Node temp=this.root; while (true) { if (temp.getNext() == null) {//未找到 System.out.println("未找到"); break; } if (temp.getNext().getId() == id) {//找到 temp.setNext(temp.getNext().getNext()); break; } } } }}class Hashtable{ private int size; LinkList[] hashtable; public Hashtable(int size) { this.size = size; hashtable = new LinkList[size];//初始化链表数组 for (int i=0;i
a(add):添加数据s(show):展示数据f(find):操作数据d(delete):删除数据e(exit):退出程序a请输入id:9请输入data:xiaominga(add):添加数据s(show):展示数据f(find):操作数据d(delete):删除数据e(exit):退出程序s第1个链表:链表为空第2个链表:链表为空第3个链表: =>Node{id=9, data='xiaoming'}第4个链表:链表为空第5个链表:链表为空第6个链表:链表为空第7个链表:链表为空a(add):添加数据s(show):展示数据f(find):操作数据d(delete):删除数据e(exit):退出程序
<-- 宝藏在此(doge)
转载地址:http://ccztz.baihongyu.com/