Java集合HashMap总结

Java HashMap总结

 

本文将对HashMap做比较全面的总结,一个是从概念上理解,第二个是HashMap的使用,这里使用HashMap基本上是键值对来操作使用,

那这个跟泛型有没有关系呢?我理解的话是有关系的,前面我们使用的泛型是一个类型的如:List<String>list,但是HashMap里面的泛型居然是两个类型的东西,HashMap<String,String>map;使用过就知道HashMap把<String,String>的数据封装在Entry这个泛型接口的类里面,实际原理可能不是这样的,但是可以这样理解。

 

一.HashMap是什么?

 

HashMap 和 HashSet 是 JavaCollection Framework 的两个重要成员,其中 HashMap 是 Map 接口的常用实现类,HashSet 是 Set 接口的常用实现类。

虽然 HashMap 和 HashSet 实现的接口规范不同,但它们底层的 Hash 存储机制完全一样,甚至 HashSet 本身就采用 HashMap 来实现的。

具体的概念也不用理解太多,知道HashMap使用键值对来存储数据就可以了。

 

二.HashMap常用的使用方法


HashMap的方法并不多,学会增删改查就可以

(一)public intsize();

返回此列表中的元素数。

(二)  public boolean isEmpty();

如果此列表中没有元素,则返回 true

(三)public void clear()
从此映射中移除所有映射关系。

(四)public void put(K key, V value)

在此映射中关联指定值与指定键。。

(五)public void remove(Object key)

从此映射中移除指定键的映射关系(如果存在)。

 

 

 

三.MashMap增删改查基本操作

 

示例一 


package com.xykj.map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
public class MainClass {
	/**
	 * HashMap的增删改查操作
	 * 使用迭代器使用时要用Entry接口
	 * */
	public static void main(String[] args) {
		
		//实例化一个HashMap对象
		HashMap< String,String>hashMap=new HashMap<>();
		
		//增加,这里乱序添加,看结果是不是乱序的!
		hashMap.put("a","libai");
		hashMap.put("d","lishiming");
		hashMap.put("z","lihongzhang");
		hashMap.put("b","lijiacheng");
		
		//删除key为“4”的元素。删除时,key和value都要匹配上否则是不会删除成功的
		//hashMap.remove("b", "lishiming");
		//使用一个参数的方法,注意参数是key的值,HashMap没有游标这个说法
		hashMap.remove("b");
		
		//修改  3的value换成liwenzhi
		hashMap.put("z", "liwenzhi");
		 
		
		//用迭代器查看,其他方法好像都是不行的,因为这个相当于层层封装的东西了
		Iterator
   
   
    
    
     
     > it=hashMap.entrySet().iterator();
		while (it.hasNext()) {
			//这里Entry是个接口
			Entry
     
     
      
      en=it.next();//next一次遍历只能取一次,否则就变味了
			String key=en.getKey();        //获得key
			String value=en.getValue();   //获得value
			System.out.println(key+" : "+value);
		}
	}
}

     
     
    
    
   
   



显示结果:

 



从结果可以看到HashMap是按照key的值自然排序显示的

 

 

 

对于示例1的简单说明:

示例1对HashMap进行了增删改查的基本操作, 这里的查看HashMap里面的元素方法是比较麻烦的,但是也是要熟练掌握的。

 

 

 

示例二


本示例使用自定义类的数据类型作为value值,同样是增删改查的操作实现。


1.先建一个自定义数据类User



package com.xykj.map2;
public class User {
    //为一个用户定义三个基本属性
    String name="";
    String sex="";
    int age=0;
   
    //利用构造方法传递参数 
    public User(String name, String sex, int age) {
       super();
       this.name = name;
       this.sex = sex;
       this.age = age;
    }
   
    //各个参数的get和set方法
    public String getName() {
       return name;
    }
    public void setName(String name) {
       this.name = name;
    }
    public String getSex() {
       return sex;
    }
    public void setSex(String sex) {
       this.sex = sex;
    }
    public int getAge() {
       return age;
    }
    public void setAge(int age) {
       this.age = age;
    }
   
     
}
 
 


2.再建主方法调用类

 

package com.xykj.map2;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
public class MainClass {
	/**
	 * HashMap的增删改查操作
	 * 使用迭代器使用时要用Entry接口
	 * */
	public static void main(String[] args) {
		
		//实例化一个HashMap对象
		HashMap< Integer,User>hashMap=new HashMap<>();
		//创建一个User对象
		User user=new User("name1", "男", 19);
		//增加,这里乱序添加,看结果是不是乱序的!
		hashMap.put(1,user);
		hashMap.put(4,new User("name4", "女", 18));
		hashMap.put(2,new User("name2", "女", 22));
		hashMap.put(7,new User("name7", "女", 20));
		
		//删除key为“1”的元素。删除时,key和value都要匹配上否则是不会删除成功的
		//两个参数的情况
		//这里的user如果换成User("name1", "男", 19);不能删除成功,这也可能比较的是地址!!
		//hashMap.remove(1,user);		
		
		//但是删除使用的是一个参数的方法,可以只输入key的值,注意这里不是游标的值
		hashMap.remove(1);
		
		//修改  2的value换成new User("meizi", "女", 19)
		hashMap.put(2, new User("meizi", "女", 19));
		
		//用迭代器查看,其他方法好像都是不行的,因为这个相当于层层封装的东西了
		Iterator
   
   
    
    
     
     > it=hashMap.entrySet().iterator();
		while (it.hasNext()) {
			//这里Entry是个接口
			Entry
     
     
      
      en=it.next();//next一次遍历只能取一次,否则就变味了
			int key=en.getKey();        //获得key
			User value=en.getValue();   //获得value,但是User类型的对象
			//String name=value.getName();   //获得name,同样可以获得sex和age
			System.out.println(key+" : "+value.toString());
		}
	}
}

     
     
    
    
   
   

 

 

运行结果:

 



 

从结果可以看到:key值的自然排序。

 

 

示例2的简单说明:

   本示例主要是value值是自定义类的使用,这个在以后数据存储也是会用到的。

   值得注意的是HashMap主要功能是数据的存储和查找,删除数据是麻烦的一件事,而且HashMap基本不用删除数据,多放几个没啥影响的。

实际应用的话一般都是通过key的值来找某一个value的值。

 

从上面两个例子,可以看到HashMap在实际的应用的具体代码,要学会使用这两种存储方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

峥嵘life

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

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

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

打赏作者

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

抵扣说明:

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

余额充值