今天初步学习了数据结构中的哈希表。
首先在概念上,哈希表和数组队列,链表一样,是一种用来储存数据的结构。它存在的价值是,当需要储存的数据的数量非常多时,比如腾讯储存qq号时,查找/删除某个数据就需要很大的时间复杂度。此时,就需要用特定的方式储存数据,这样就能大大降低查找的时间复杂度。比如,今天,用一种简单的方式,比如id号(三位数),将三位数上的数字加起来,然后将相同的数放在一个链表里,链表的每个节点储存了一个链表,将相同的数字按顺序排放。
下面是哈希表的源代码。
public class Hash { private NodeLinked array[] = new NodeLinked[100]; //添加数据 public void add(Colleger obj){ String num = obj.id+""; int count = 0; for(int i=0;i<num.length();i++){ count += ((int)num.charAt(i)-48); } if(array[count] == null){ NodeLinked temp = new NodeLinked(); temp.create(obj); array[count] =temp ; }else{ array[count].create(obj); } // for(int i = 0;i<array[count].size;i++){ // System.out.println(((Colleger)array[count].find(i).getObj()).id); // } } //查找数据 public Colleger get(int id){ String num = id+""; int count = 0; for(int i=0;i<num.length();i++){ count += ((int)num.charAt(i)-48); } for(int i = 0;i<array[count].size;i++){ if(((Colleger)array[count].show(i)).id == id){ return (Colleger)array[count].show(i); } } return null; } //删除数据 public void delete(int id){ String num = id+""; int count = 0; for(int i=0;i<num.length();i++){ count += ((int)num.charAt(i)-48); } for(int i = 0;i<array[count].size;i++){ if(((Colleger)array[count].show(i)).id == id){ Colleger temp = (Colleger)array[count].delete(i); System.out.println(temp.name); } } } }
然后还测试了一下哈希表的性能与普通数组的比较,代码如下。
public class Main { public static void main(String[] args) { Hash h = new Hash(); //h.delete(173); //System.out.println(temp.name); LinkedList<Colleger> link = new LinkedList<Colleger>(); int num = 10000000; long start = System.currentTimeMillis(); for(int i = 0;i<num;i++){ link.add(new Colleger(i,"Colleger"+i)); } long end = System.currentTimeMillis(); System.out.println("这是链表的创建时间"+(end-start)); long start2 = System.currentTimeMillis(); for(int i = 0;i<num;i++){ h.add(new Colleger(i,"Colleger"+i)); } long end2 = System.currentTimeMillis(); System.out.println("这是哈希表的创建时间"+(end2-start2)); long start3 = System.currentTimeMillis(); link.get(8000000); long end3 = System.currentTimeMillis(); System.out.println("这是链表的查找时间"+(end3-start3)); long start4 = System.currentTimeMillis(); h.get(8000000); long end4 = System.currentTimeMillis(); System.out.println("这是哈希表的查找时间"+(end4-start4)); } }
运行结果如下[img]
[/img]
相关推荐
严蔚敏 数据结构 ppt 哈希表 数 图 严蔚敏 数据结构 ppt 哈希表 数 图 严蔚敏 数据结构 ppt 哈希表 数 图
这是数据结构中关于哈希表这个知识的实现,是使用C++实现的,那么希望能够对学校数据结构的哈希表这个知识点的朋友能有帮助
针对某个集体(比如你所在的班级)中的“人名”设计一个哈希表,使得平均查找长度不超过R,完成相应的建表和查表程序。 假设人名为中国人姓名的汉语拼音形式。待填入哈希表的人名共有30个,取平均查找长度的上限为2...
Java数据结构 线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构
数据结构课设 哈希表 C++源码 需要的拿去
这是我们数据结构哈希表的实验报告,是严格按照实验报告格式来的,自己做的,希望能帮到你
数据结构试验 哈希表的设计及实现 C语言 源代码
数据结构里哈希表的实验报告 构造二叉树,构造哈希表等 c语言版
数据结构中的哈希表详细解析,有力与对数据结构的理解,更有利于对哈希表的理解,其中的是C语言
哈希表的代码,可以用于数据结构试验交作业或者用于写实验报告
数据结构 (课程设计)哈希表实现数据结构 (课程设计)哈希表实现
这是关于哈希表设计的一种程序,在数据结构设计中的一个重要方面
数据结构之哈希表.pdf
数据结构中的哈希表查找,代码有注释,理解算法后理解代码非常容易看懂
数据结构哈希表的实现,很值得初学者的学习与应用,看完代买能够掌握基本哈希表的应用
这是数据结构中哈希表的实现代码,请大家在需要的时候尽量的下载。
哈希表的设计与实现——链地址法 问题描述: 设计哈希表实现电话号码查找系统。 基本要求: (1)设每个记录有下列数据项:电话号码、用户名、地址; (2)从文件中读取各记录,分别以电话号码和用户名为关键字建立...
这个关于数据结构中的哈希表和二叉树的实现,使用C++实现,那么希望能够对学习数据结构中这个知识点的朋友有帮助
《数据结构》(C语言版本)的实验之一,哈希表设计。网上找的资源,共享。