JAVA学习day1——HashMap简介(含代码)

写在前面

HashMap是一个散列表,可以用于储存数据,和C++的数组功能相似,但在Java中有很多类都能实现数组的功能,只是存取方式不同,排序方式不同。HashMap就是其中之一。

HashMap有以下特点:

  • 存储键值对应的映射
  • 实现Map接口,具有很快的访问速度
  • 最多允许一条记录的键位null
  • 不支持线程同步(在java多线程编程中,这一点尤为重要)
  • 无序存储,不会记录插入的顺序

HashMap的存储内容

在上面我们给出了HashMap的存储内容的定义:HashMap存储键值对应的映射,实际上HashMap存储什么呢?存储两个值:key 和 value

key和value是一组一一对应的数据,即一个key对应一个value。如:一个学号对应一个学生。

其中,key和value虽然存在一一对应的情况,但key和value的存储数据类型允许不相同。即我们可以用学号(Integer整型)做key,用成绩(Integer整型)做value,此时key与value类型相同。但我们也可以用学号(Integer整型)做key,用姓名(String字符串)做value,此时key与value类型并不相同。

这里需要说明的是,HashMap中的元素实际上是对象,即HashMap存储的是对象而非一个变量,所以HashMap实际上并不能存储 int,double 这些变量的,可以使用包装类将其封装成对象再放到HashMap中。

HashMap代码

先放出我在上Java课时的这部分内容的实验作业代码:

package exp4;
import java.util.*;
/**
 * 
 * @author 苏三有春
 * 编写HashMap
 * 创建HashMap<Integer,String>对象,往里添加元素若干
 * 分别用keySet()方法转成Set<Integer>
 * 然后遍历Set<Integer>的方法
 * 用entrySet()方法转成Set<Map.Entry<Integer,String>>
 * 然后遍历Set<Map.Entry<Integer,String>>的方式遍历HashMap<Integer,String>
 */
public class HashMapTest {
	public static void main(String[] args) {
		HashMap<Integer,String > hashMapStudent=new HashMap<Integer,String>();
		//向HashMap中添加元素
		hashMapStudent.put(1, "susan1");
		hashMapStudent.put(2, "susan2");
		hashMapStudent.put(3, "susan3");
		hashMapStudent.put(4, "susan4");
		
		//尝试增加一个key,value相同的元素进去
		hashMapStudent.put(3, "susan3");
		
		//用keySet方法遍历
		System.out.println("用keyset方法遍历hashMapStudent中的元素");
		Set<Integer> keys = hashMapStudent.keySet();
		for(Integer key : keys) {
			System.out.println("编号:"+key+"姓名:"+hashMapStudent.get(key));
		}
		
		//尝试增加一个key相同,value不同的元素进去
		hashMapStudent.put(3,"susan3*" );		
		//用entrySet()方法遍历
		System.out.println("用entryset方法遍历hashMapStudent中的元素");
		for(Map.Entry<Integer, String> key :hashMapStudent.entrySet()) {
			System.out.println("编号:"+key.getKey()+"姓名:"+key.getValue());
		}
	}
}

下面对代码做一些解释:

HashMap<Integer,String> hashMapStudent=new HashMap<Integer,String>();

这一行代码是创建一个HashMap对象,该对象名为:hashMapStudent,用尖括号<>,表明该HashMap的key值类型与String值类型,注意,在这里,我们的key是整型,但用的是整型的包装类:Integer而非int,因为HashMap存放的是对象,我们必须把整型的数据封装成对象再装入其中。value是String,因String本身就是new出一个对象(若此处不懂,先记住,String类型的都是对象。)

hashMapStudent.put(1, "susan1");

这一行代码中调用了HashMap中的一个方法,即put()方法,这个方法就是我们用来将元素装入HashMap的一个方法,此处说明:添加一个key为1(Integer类型),value为"susan1"(String类型)的元素。

//用keySet方法遍历
System.out.println("用keyset方法遍历hashMapStudent中的元素");
Set<Integer> keys = hashMapStudent.keySet();
for(Integer key : keys) {
    System.out.println("编号:"+key+"姓名:"+hashMapStudent.get(key));
}

这一段代码中调用了建立了一个Set对象,命名为keys,把hashMapStudent(即上面建立的一个HashMap的一个对象)中的key全部赋值给keys。

然后用增强型for循环遍历key,将key与key对应的value一个一个输出。

get(key)方法,传入key参数,获取key对应的value。

这是其中的一种访问元素的方法。

//用entrySet()方法遍历
System.out.println("用entryset方法遍历hashMapStudent中的元素");
for(Map.Entry<Integer, String> key :hashMapStudent.entrySet()) {
    System.out.println("编号:"+key.getKey()+"姓名:"+key.getValue());
}

这是另一种访问元素的方法,用entrySet()方法遍历。

entrySet()方法会返回映射中包含的映射的Set视图,Set视图就是HashMap中所有的键值都被看作是一个set集合

我们在增强for循环中遍历这个set集合,通过这个视图的getKey()和getValue()方法来获取对应的key值和value值。

此外,下面附上这段代码运行后的输出:

用keyset方法遍历hashMapStudent中的元素
编号:1姓名:susan1
编号:2姓名:susan2
编号:3姓名:susan3
编号:4姓名:susan4
用entryset方法遍历hashMapStudent中的元素
编号:1姓名:susan1
编号:2姓名:susan2
编号:3姓名:susan3*
编号:4姓名:susan4

 可以看到,若已经有一个元素为(3,susan3),则即使再加一个元素(3,susan3),HashMap也不会重复加入,但是若添加一个(3,susan3*),就会将HashMap中的key=3所对应的value更改成3*。

HashMap补充:

在上面的代码中,体现了HashMap的增,改,查,如果想删除HashMap中的元素,则可以使用:

hashMapStudent.remove(3);

使用remove(key)方法,将key=3的元素从hashMapStudent中删除。

清除所有元素使用:

hashMapStudent.clear();

如果要计算HashMap中的元素个数则可以使用:

count=hashMapStudent.size();

将hashMapStudent中的元素个数赋值给count。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苏三有春

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值