前提:
引入java.util包
简介:
HashMap是Map结构的集合,最主要的属性是
Key-Value(键值对),这样可以很方便的进行。
在HashMap中是根据Key来进行存储的,如果Key相同,前值会被覆盖。
语法结构:
创建HashMap集合类:
HashMap<键类型,值类型> 集合名=new HashMap<>();
集合元素的加入:
集合名.put(关键字,值);
集合的查改:
if(hm.containsKey(Key)) //用containsKey找集合中的关键字
{
值的类型 temp=集合名.get(Key); //根据键 取出 值
System.out.println(temp.getName()+" "+temp.getAge()+" "+temp.getSalary()); //输出 值的数据
}
可以直接通过get方法用“键”来查找,不再需要跟List集合一样去遍历查找集合的遍历:
Iterator It=hm.keySet().iterator(); //创建迭代器
while(It.hasNext()) //迭代
{
String key=It.next().toString(); //因为It为对象,所以用toString来变成String类型
Clerk temp=hm.get(key); //根据 键 取出 值
System.out.println(temp.getName()+" "+temp.getAge()+" "+temp.getSalary()); //输出 值的数据
}
HashMap用迭代器进行遍历,那么有人要问了,为什么不用for循环或者foreach呢?
因为你用get方法的时候需要知道Key,而我们在遍历前不知道Key,只好创建迭代器来取出Key来遍历。
所以遍历的操作过程应该是:用迭代器获取Key的所有对象,然后把Key的对象转换为Key的实际类型,接着根据Key获取Value,最后输出Value的数据。
集合元素的删除:
集合名.remove(Key);
根据Key进行Value的删除
代码实现:
import java.util.*; //导包
public class Test1 {
public static void main(String[] args)
{
HashMap<String,Clerk> hm=new HashMap<>(); //创建HashMap,设Key类型为String,Value类型为Clerk
Clerk c1=new Clerk("周卫国",30,5000); //创建对象
Clerk c2=new Clerk("周杰仑",31,5000);
Clerk c3=new Clerk("周华鉴",32,5000);
hm.put("01", c1); //添加键值对
hm.put("02", c2);
hm.put("03", c3);
System.out.println("----------查找");
if(hm.containsKey("02")) //查找是否包含"02"键
{
Clerk temp=hm.get("02"); //根据 键 找出 值
temp.setSalary(10000); //改变值的信息
System.out.println(temp.getName()+" "+temp.getAge()+" "+temp.getSalary()); //输出值的信息
}
else
System.out.println("没有!");
System.out.println("----------遍历");
Iterator It=hm.keySet().iterator(); //创建迭代器,放入 键
while(It.hasNext()) //如果迭代器不空就循环
{
String key=It.next().toString(); //把迭代器的对象转换为String
Clerk temp=hm.get(key); //根据 键 找出 值
System.out.println(temp.getName()+" "+temp.getAge()+" "+temp.getSalary()); //输出值的信息
}
System.out.println("----------删除");
hm.remove("01"); //移除 键 和对应的 值
Iterator It1=hm.keySet().iterator(); //创建迭代器遍历
while(It1.hasNext())
{
String key=It1.next().toString();
Clerk temp=hm.get(key);
System.out.println(temp.getName()+" "+temp.getAge()+" "+temp.getSalary());
}
}
}
class Clerk //定义员工类
{
private String name;
private int age;
private double salary;
Clerk(String name,int age,double salary)
{
this.name=name;
this.age=age;
this.salary=salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
输出结果:
---------查找
周杰仑 31 10000.0
----------遍历
周卫国 30 5000.0
周杰仑 31 10000.0
周华鉴 32 5000.0
----------删除
周杰仑 31 10000.0
周华鉴 32 5000.0
优点:
HashMap具有查找方便、速度快的特点,不需要遍历。
HashMap可以灵活的添加,只要内存够,没有上限。
缺点:
线程不安全,HashMap是异步的,在多线程问题中会出现错误。
欢迎各位在评论区留言探讨~~