今天刚刚写了一下有关哈希链表的代码:感觉还是挺简单的,虽然我的是没啥技术含量的因为我没有解决哈希表冲突的问题,不过以后会解决的,解决的方法就是“挂链”。
其实我是不能说很了解hash的,我只是把它当做数组与链表的结合,数组为主,链表在数组上,我按我的理解把它实现出来,它的形式就是一个一定长度的数组加上n条链表。
首先我先简单介绍一下我所知道哈希链表:
哈希表是基于数组的,用于存储大批量的数据;如果说数组是查找数据的能手,链表是
增删数据的能手,那么哈希表便是奉行的我们中国的“中庸之道”。他可以说是数组与链表的结合。
如果你不追求完美的话,只想着体验一下哈希表,那么建立一个哈希表其实很简单:你只需要一个节点类和一个方法类就可以。
一下是节点类:
public class Student {
//声明学生的属性
private String name ;
private int namber ;
private Student stuNext ;
/**
* 构造方法
* @param name
*/
public Student(String name,int namber){
this.name = name ;
this.namber = namber ;
}
public void setName(String name){
this.name = name ;
}
public String getName(){
return name ;
}
public void setNamber(int namber){
this.namber = namber;
}
public int getNumber(){
return namber ;
}
public void setStu(Student stuNext){
this.stuNext = stuNext ;
}
public Student getStu(){
return stuNext;
}
}
其实方法类也就是包括最基本的增删改查的类,理想情况下 ,用递归方法比较好,但是由于我当时没有想到如何用递归方法所以我采用的是其他方法。
这里我只展示其中一部分代码(增,查)
其中方法可以根据个人的想法来写并没有固定模式,这里我用的是取余法。
/**
* 添加student的方法
*/
public void add(Student stu) {
int key = stu.getNumber();
int index = key % 7;
if (hashline[index] == null) {
hashline[index] = stu;
//System.out.println("hashline[index]=" + hashline[index].getName());
} else if (hashline[index] != null) {
Student stu1 = this.getFinal(hashline[index]);
System.out.println("stu111"+stu1);
stu1.setStu(stu);
System.out.println("stu1=" + stu1.getStu().getName());
}
//
}
/**
* 查找的方法
*/
public Student find(int key) {
int index = key % 7;
if(hashline[index]==null){
System.out.println("没有此人!");
return null;
}
Student stu = hashline[index];
int i = 0;
if (this.getlenght(stu) == 0) {
System.out.println("没有此人");
return null;
}
while (i != this.getlenght(stu)) {
if (stu == null) {
System.out.println("没有此人");
return null;
} else if (stu != null) {
if (stu.getNumber() == key) {
return stu;
} else {
stu = hashline[index];
}
}
i++;
System.out.println("i=" + i);
}
return null;
}
特别提示:用递归方法比较好,这个方法一不注意就有可能报空。里面有一些嵌套的方法没有给出。
测试:
public static void main(String[] args) {
HashLine hf = new HashLine();
//
Student stu1 = new Student("张三", 01);
Student stu2 = new Student("里斯", 02);
Student stu13 = new Student("王五", 05);
Student stu3 = new Student("liuzi", 8);
Student stu4 = new Student("起", 9);
Student stu5 = new Student("吧", 11);
Student stu6 = new Student("就", 15);
hf.add(stu13);
hf.add(stu2);
hf.add(stu1);
hf.add(stu3);
hf.add(stu6);
hf.add(stu4);
hf.add(stu5);
System.out.println("找到此人 " + hf.find(01).getName());
hf.find(13);
}
输出结果为:找到此人张三
没有此人
分享到:
相关推荐
- **丰富的数据结构**:Redis支持多种数据结构,包括字符串(Strings)、列表(Lists)、集合(Sets)、哈希(Hashes)和有序集合(ZSets),这些数据结构能够满足不同应用场景的需求。 - **持久化机制**:提供了RDB(Redis ...
在初识Redis的过程中,我们通常会关注以下几个关键知识点: 1. **数据类型**:Redis支持五种基本数据类型,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。每种类型都有其独特的...
初识 Git&Gerrit Git 是一种分布式的代码管理工具,不需要中心服务器,在没有网络的情况下也能进行版本管理。Git 与 SVN 相比,有许多不同的理念设计。Git 的分支策略不同于 SVN,Git 的分支创建、切换都非常简单。...
相比于简单的余数计算,一致性哈希能更好地处理服务器动态增减的情况,减少了数据重新分布的次数,从而降低了缓存失效的影响。 4. **LRU(Least Recently Used)数据清理策略**: 当内存空间不足时,Memcached采用...
Redis初识:深入理解键值存储数据库 Redis是一款开源、高性能、基于键值对的数据存储系统,常用于数据缓存、消息队列以及数据库持久化等场景。它以内存为数据存储介质,支持多种数据结构,如字符串、哈希、列表、...
### 头歌初识Redis知识点详解 #### 一、Redis基础知识概述 Redis是一种开源的、高性能的键值存储系统,以其快速的数据存取速度而著称。它支持多种数据结构,能够满足不同的应用场景需求。 - **数据库管理**: - ...
在前端开发中,数据结构和算法的高效使用对于优化代码性能至关重要。`HashMap`作为一种常见的数据结构,它在JavaScript中的应用广泛,...同时,`README.md`文件通常会提供安装、使用和贡献指南,是初识项目的好起点。
《初识Perl》是官方推荐的一本入门级Perl编程教材,专为那些希望涉足Perl编程领域的初学者设计。Perl是一种强大的、灵活的脚本语言,广泛应用于文本处理、系统管理、网络编程以及Web开发等多个领域。这本书深入浅出...
- **hashes类型及操作**:包括`hset`(设置哈希表键字段的值)、`hsetnx`(只有在字段不存在时才设置哈希表键字段的值)、`hmset`(同时设置哈希表中多个字段的值)、`hget`(获取哈希表中字段的值)、`hmget`(获取...
##### 1.3 初识Redis - **数据类型** - Redis支持多种数据类型,包括字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)以及有序集合(Sorted Sets)。 - **持久化** - Redis提供了两种持久化机制...
**1.3 初识Redis** - **数据类型**:Redis提供了五种主要的数据类型,分别是字符串(String)、哈希(Hash)、列表(List)、集合(Set)以及有序集合(ZSet),每种类型都有其独特的应用场景。 - **持久化**:Redis支持两种...
**1.3 初识Redis** - **数据类型**:Redis支持多种数据类型,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)以及有序集合(Sorted Set)。 - **持久化**:为了防止数据丢失,Redis提供了两种持久...
##### 1.3 初识Redis **1.3.1 数据类型** Redis支持多种数据类型,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)以及有序集合(Sorted Set)。这些丰富的数据结构使得Redis不仅可以用作简单的...
**1.3 初识 Redis** - **数据类型**:Redis 支持多种数据结构,如字符串(String)、哈希表(Hash)、列表(List)、集合(Set)以及有序集合(Sorted Set)。 - **持久化**:通过 RDB 或 AOF 两种方式实现数据持久...
首先,"初识ACM.ppt"为入门者提供了ACM竞赛的基本介绍,包括ACM/ICPC的起源、比赛形式、参赛规则等,帮助新手理解这个比赛的背景和意义。它还可能涵盖了如何组建团队、训练方法以及竞赛中需要注意的事项,为初学者...
#### 三、初识Redis - **1.3.1 数据类型** - Redis支持多种数据类型,如字符串(String)、散列(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)等。 - **1.3.2 持久化** - Redis提供了两种持久化方式:RDB...