今天初步学习了数据结构中的哈希表。
首先在概念上,哈希表和数组队列,链表一样,是一种用来储存数据的结构。它存在的价值是,当需要储存的数据的数量非常多时,比如腾讯储存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]
相关推荐
数据结构中的哈希表是一种高效的数据存储和检索结构,它通过特定的哈希函数将关键字映射到数组的索引位置,实现快速访问。在这个实验报告中,我们关注的是如何构建哈希表并进行基本操作,包括插入、删除、查找等。 ...
哈希表,也被称为散列表,是一种非常重要的数据结构,它在计算机科学中扮演着关键角色,尤其是在存储和检索大量数据时。哈希表通过使用哈希函数将键(Key)映射到数组的索引位置,实现了快速的查找、插入和删除操作...
针对某个集体(比如你所在的班级)中的“人名”设计一个哈希表,使得平均查找长度不超过R,完成相应的建表和查表程序。 假设人名为中国人姓名的汉语拼音形式。待填入哈希表的人名共有30个,取平均查找长度的上限为2...
Java数据结构 线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构
在“数据结构哈希表设计实验报告”中,我们可能会涉及到以下几个关键知识点: 1. **哈希函数**:哈希函数是哈希表的核心,它的作用是将键转化为数组的索引。一个好的哈希函数应该尽可能使得不同的键映射到不同的...
数据结构课设 哈希表 C++源码 需要的拿去
哈希表是一种高效的数据结构,它通过特定的函数——哈希函数,将任意大小的键(key)映射到一个固定大小的数组中,从而实现快速查找、插入和删除操作。在“数据结构试验:哈希表设计”中,我们将探讨哈希表的基本...
哈希表是一种高效的数据结构,主要用于快速查找和存储数据。它通过哈希函数将数据映射到一个固定大小的数组中,以达到快速访问的目的。哈希冲突是哈希表面临的主要挑战,解决冲突的方法有开放寻址法、链地址法等。 ...
哈希表是一种高效的数据结构,它通过特定的哈希函数将键(Key)映射到一个固定大小的数组中,以此实现快速的查找、插入和删除操作。在数据结构领域,哈希表是解决查找问题的重要工具,尤其适用于大数据量且需要频繁...
哈希表是一种高效的数据结构,它通过特定的哈希函数将键(key)映射到一个固定大小的数组中,以此实现快速查找、插入和删除等操作。在数据结构设计中,哈希表是一个重要的组成部分,尤其对于大量数据的处理,它的...
### 数据结构中的哈希表查找 #### 哈希表简介 哈希表(Hash Table)是一种基于数组的数据结构,它通过将关键字映射到数组的某个位置来存储和检索数据,这种映射过程通常由一个哈希函数完成。哈希表能够实现快速的...
数据结构里哈希表的实验报告 构造二叉树,构造哈希表等 c语言版
### 数据结构:C语言实现哈希表 #### 核心知识点概述 本篇文章将围绕一个C语言中的哈希表实现案例展开,详细解析哈希表的基本概念、设计思路及其实现过程。通过阅读本文,您将了解到哈希表在C语言编程中的应用,并...
哈希表和二叉树是数据结构中两个重要的概念,它们在存储和检索数据时具有各自的优势和应用场景。本文将详细探讨这两种数据结构,并通过C++实现来加深理解。 首先,我们来了解一下哈希表。哈希表,又称散列表,是一...
哈希表的代码,可以用于数据结构试验交作业或者用于写实验报告
哈希表,又称散列表,是数据结构课程中一种非常重要的数据存储结构,它通过将关键字(key)映射到数组的索引位置来实现快速的查找、插入和删除操作。在本课程设计中,我们将深入理解哈希表的原理,并亲手实现一个...
哈希表课程设计数据结构实验报告——哈希表设计 针对某个集体中的人名设计一个哈希表,使得平均查找长度不超过R,完成相应的建立和查表程序. 1.2 人名为汉语拼音形式,最长不超过18个字符(如:庄双双 ...
哈希表,也被称为散列表,是数据结构中一种高效的数据存储和检索工具。它通过哈希函数将数据的关键字映射到一个固定大小的数组中,使得在平均情况下,查找、插入和删除操作的时间复杂度可以达到O(1)。这种高效的性能...