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);
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值