IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 3.4 散列表(Hash) -> 正文阅读

[数据结构与算法]3.4 散列表(Hash)

传统意义上的Hash表,是能以int 做值,将数据存放起来的数据结构。Java的Hash表可以以任何

实现了hash()函数的类的对象做值来存放对象。

Hash 表是非常有用的数据结构,熟悉它,充分使用它,往往能起到事半功倍的效果。

我们可能有一种需求,输入一个数字,然后给出对应的英文。

那么查找英文名称的程序我们应该怎么做呢?

首先,定义接口

给出一个数,返回一个名字

public class Number{

? ? ? ? public String getName(int number){

? ? ? ? ? ? ? ?switch(numebr){

? ? ? ? ? ? ? ? ? ? ? ? case ……

????????????????}

???????????????? return "";

????????}

}

当然我们可以用Switch, 但是太啰嗦了,我们能不能实现,今天有1,对应one ,明天有8对应eight

或者让 1 对应 eight , 8? 对应 one .灵活对应呢?

数组可以吗?对应地址 ,放对应元素,不是很漂亮。

这里我们引入容器

HashMap<Interger, String> coinnames = new HashMap<Integer, String>();

我们放进去两个参数,第一个代表 “键”,第二个代表元素,一个键对应一个值

这个键值类型是 Interger ,是int的包裹类型,这时一个面向对象的程序,在这个容器里面,所有的东西必须是对象,而不能基本元素。一个包裹类型的变量可以直接接受它所对应的基础变量。

当我们调用存储

名称.put(键,"字符串");


public Coin(){

????????coinnames.put(1,"fashkhgfa");

????????coinnames.put(10,"fa4fhdfha");

????????coinnames.put(100,"fasgsgs55a");

}

然后成员函数,需要得到键值从而调用返回元素

public String getName(int number){

? ? ? ? return? ? coinnames.get(amount);

}

主函数里面进行创建对象调用

public static void main(String[] args){
?? ?Scanner in = new Scanner(System.in);
?? ?int number = in.nextInt();
?? ?Coin coin = new Coin();
?? ?String name = coin.getName(amount);
?? ?System.out.println(name);
}

当我们输入对应的键值,就会输出我们想要的元素,但是如果我们的hash表里面没有呢,

我们可以改进一下做一个判断:

if(coinnames.containsKey(number))

? ? ? ? return coinnames.get(number);

else?

? ? ? ? return "NOT FOUND";

注意:

●如果有添加重复的键值和元素,会取代那个元素

●如果想查看hash 里面有多少元素,

System.out.println(coinnames.keySet().size());

????????容器名.KeySet().size()

●想直接输出hash表

System.out.println(coinnames);


System.out.println(容器名);


结果:

{ 键值=元素,…………}

●遍历hash 表

通过键值赋值,然后调用输出

for(Integer k : coinnames.keySet()){

? ? ? ? String s = coinnames.get(k);

? ? ? ? System.out.println(s);

}


for(Integer k : 容器名.keySet()){

? ? ? ? String? ?对象名 = 容器名.get(k);

????????System.out.println(对象名);

}

源代码:

import java.util.Scanner;
public class Coin{
	private HashMap<Interger, String> coinnames = new HashMap<Integer, String>();
	
	public Coin(){
????????coinnames.put(1,"fashkhgfa");
????????coinnames.put(10,"fa4fhdfha");
????????coinnames.put(100,"fasgsgs55a");
	}
	public String getName(int number){
? ? ? ?if(coinnames.containsKey(number))

? ? ? ?     return coinnames.get(number);

        else?

? ? ? ?     return "NOT FOUND";

	}

	public static void main(String[] args){
		Scanner in = new Scanner(System.in);
		int number = in.nextInt();
		Coin coin = new Coin();
		String name = coin.getName(number);
		System.out.println(name);
	}
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-07-21 21:45:58  更:2022-07-21 21:48:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:16:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码