1.HashMap概述
(1)首先HashMap是基于哈希表的Map接口实现的。另外HashMap中存储的数据是按照键值跟键值对的关系来进行存储的。
(2)不同于ArrayList方法的是,ArrayList中的每个元素都是有序的,既然有序,那么每个元素都有它所对应的index。当我们想要查找元素时,就可以通过元素的index来进行查询。但是如果数据量庞大,我们想要从中取出一个或者几个元素的时候,那么就需要整个List遍历找出要取的index,这样就需要花费很长的时间而且耗资源效率不高效。而HashMap在这点上就大大减少了查找的负担。只需要通过查找key的方式就可以找到要查找对象的key和value。不用key跟value都去找它的index。
(3)HashMap中key,value是成对出现的,一个key对应一个value。key唯一。
(4)HashMap的key允许是null,但是null的情况只能1个。一般出现null都是出现bug的情况才会有,不推荐把key设置成null。
(5)HashMap无序。
2. HashMap的创建(添加)
注释:HashMap的创建跟其他类的创建以及ArrayList的方法创建是一样的都是通过new一个对象的方式创建。
而这里顺便强调一点的是.put(key, value);方法既是追加也是更改。如果list中没有该元素那么追加这个元素,如果list中已经含有这个元素那么就更改这个元素的值(因为key相同所以更改的都是value的内容)
package com.java.demo_9;
import java.util.HashMap;
public class HashTest1 {
public static void main(String[] args) {
HashMap map = new HashMap();
map.put("tony", "13962349564");
map.put("kevin","18615479975");
map.put("Vivian","15948759694");
System.out.println(map); //直接输出内容
System.out.println("====================================================");
String result =(String)map.get("tony"); //通过.get方法查找对应的value
System.out.println(result);
System.out.println("====================================================");
/**
* 编例HashMap中所有key跟value的值
*/
for(Object key:map.keySet()){
String value = (String) map.get(key);
System.out.println(key+":"+value);
}
}
}
结果:
(1){Vivian=15948759694, tony=13962349564, kevin=18615479975} 注释:直接打印
====================================================
(2)13962349564 注释:获取的是指定key的value
====================================================
(3)通过for循环遍历后的结果。(输出HashMap中所有key与value)
Vivian:15948759694
tony:13962349564
kevin:18615479975
3. HashMap的修改
注释:上面已经说过了。.put的方法即是添加也是修改。它没有update方法,所以当要修改一个元素的时候首先一定要先判断这个元素是否存在于hashmap中然后再修改。不然一旦没有该元素,那么put就实现了添加的作用。
package com.java.demo_9;
import java.util.HashMap;
public class HashTest1 {
public static void main(String[] args) {
HashMap map = new HashMap();
map.put("tony", "13962349564");
map.put("kevin","18615479975");
map.put("Vivian","15948759694");
System.out.println("====================================================");
/**
* 编例HashMap中所有key跟value的值
*/
for(Object key:map.keySet()){
String value = (String) map.get(key);
System.out.println(key+":"+value);
}
System.out.println("====================================================");
/**
* 修改
*/
System.out.println(map.containsKey("Vivian")); //通过containsKey()方法做判断如果list中包含查找key,返回值为true.
map.put("Vivian", "888888888");
for(Object key:map.keySet()){
String value = (String) map.get(key);
System.out.println(key+":"+value);
}
}
}
结果:通过下面的输出结果可以看出Vivian的数据已经被替换掉了。所以.put在这里的方法起到了变更的作用并不是追加。但是建议在更改key前无论是通过if,else还是其他方法都要对目前hashmap中的元素做一个对比或者说查找是否有该元素。如果没有直接put就不是变更了变成了追加。这点一定要注意。
【修改前数据】 Vivian:15948759694 tony:13962349564 kevin:18615479975 ==================================================== 【判断是否包含查找key的返回值】 true 【修改后数据】 Vivian:888888888 tony:13962349564 kevin:18615479975
4. HashMap的删除
注释: HashMap中有.remove()方法。可以直接通过这种方法删除要删除元素。
package com.java.demo_9;
import java.util.HashMap;
public class HashTest1 {
public static void main(String[] args) {
HashMap map = new HashMap();
map.put("tony", "13962349564");
map.put("kevin","18615479975");
map.put("Vivian","15948759694");
System.out.println("====================================================");
/**
* 编例HashMap中所有key跟value的值
*/
for(Object key:map.keySet()){
String value = (String) map.get(key);
System.out.println(key+":"+value);
}
System.out.println("====================================================");
map.remove("Vivian");
for(Object key:map.keySet()){
String value = (String) map.get(key);
System.out.println(key+":"+value);
}
}
}
结果:
【修改前】 Vivian:15948759694 tony:13962349564 kevin:18615479975 ==================================================== 【修改后】 tony:13962349564 kevin:18615479975
5. HashMap的查找【面向对象】
注释:对于HashMap的查找其实没有什么太大的意义。因为在HashMap中我们要查的是key,key是唯一的所以只要知道了key就能把对应的value一并查找出来。而查询一个字典中是否存在。通过上面的.containsKey(key))的方法也可以直接得到true,false的结果。因此关于查找我们不单一介绍。结合复杂案例再一并来看HashMap的查找。下面分享一个通过创建一个student类,并且根据student类中的studentName来查找的案例。
package com.java.demo_9; /** * Student类 * @author liupeng * */ public class Student { private String stuName; private String classCord; private String stuNumber; public String getStuName() { return stuName; } public void setStuName(String stuName) { this.stuName = stuName; } public String getClassCord() { return classCord; } public void setClassCord(String classCord) { this.classCord = classCord; } public String getStuNumber() { return stuNumber; } public void setStuNumber(String stuNumber) { this.stuNumber = stuNumber; } public Student() { super(); // TODO Auto-generated constructor stub } public Student(String stuName,String stuNumber,String classCord) { super(); this.stuName = stuName; this.classCord = classCord; this.stuNumber = stuNumber; } @Override public String toString() { return "学员名称:" + stuName + ", 学员编号:" + stuNumber + ", 班级番号:" + classCord; } }