目录
一、Java中的HashMap类
HashMap是Map接口的一个实现类 。我在之前的博客Java中的HashSet的常用方法总结中查看底层代码时提到过HashMap类,本篇就详细讨论一下,Java中HashMap类的常用方法。
二、定义语法
package runtime;
import java.util.HashMap;//引包
public class Goat { //代码示例1
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<String, Integer>();//创建HashMap类对象
}
}
观察创建语句可发现HashMap类中可以定义两个泛型,前面的决定HashMap中key元素的类,后面的决定HashMap中value元素的类。(而且,Java中,泛型不能是基本数据类型,但可以是基本数据类型的包装类,byte-Byte short-Short int-Integer long-Long char-Char )而在HashMap类中,key元素不能重复。
三、HashMap类常用方法
(1)put(K key, V value)
put(K key, V value) 将键(key)/值(value)映射存放到Map集合中
改写代码示例1
package runtime;
import java.util.HashMap;
public class Goat { //代码示例2
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("Tom", 100);//向HashMap中添加元素
}
}
利用put()方法去添加元素时,元素的key不能重复,如果重复,则一定覆盖原先的value值,该现象我会在get()方法中会验证。
(2)get(Object key)
get(Object key) 返回指定键所映射的值,没有该key对应的值则返回 null,即获取key对应的value。
改写代码示例1:
package runtime;
import java.util.HashMap;
public class Goat { //代码示例3
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("Tom", 100);
map.put("Tom", 0);
int score = map.get("Tom");// 获取key对应的value
System.out.println(score);// key不允许重复,若重复,则覆盖已有key的value
}
}
观察运行结果:
可知,之前加入的value已被覆盖,前面的观点得证
(3)size()
size() 返回Map集合中数据数量,准确说是返回key-value的组数。
package runtime;
import java.util.HashMap;
public class Goat { //代码示例4
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("Tom", 100);
map.put("Jim", 90);
map.put("Sam", 91);
System.out.println(map.size());
}
}
(4)clear()
clear() 清空Map集合
import java.util.HashMap;
public class Goat { //代码示例5
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("Tom", 100);
map.put("Jim", 90);
map.put("Sam", 91);
map.clear();// 清空map中的key-value
System.out.println(map.size());
}
}
输出元素个数为0,说明集合中元素已被清空。
(5)isEmpty ()
isEmpty () 判断Map集合中是否有数据,如果没有则返回true,否则返回false
import java.util.HashMap;
public class Goat { //代码示例6
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("Tom", 100);
map.put("Jim", 90);
map.put("Sam", 91);
map.clear();// 清空map中的key-value
System.out.println(map.isEmpty());
}
}
运行结果:
(6)remove(Object key)
remove(Object key) 删除Map集合中键为key的数据并返回其所对应value值。
package runtime;
import java.util.HashMap;
public class Goat { //代码示例7
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("Tom", 100);
map.put("Jim", 90);
map.put("Sam", 91);
int score = map.remove("Tom");
System.out.println(score);
}
}
运行结果:
(7)values()
values() 返回Map集合中所有value组成的以Collection数据类型格式数据。
一般用于遍历HashMap集合中value值:
package runtime;
import java.util.Collection;
import java.util.HashMap;
public class Goat { //代码示例8
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("Tom", 100);
map.put("Jim", 90);
map.put("Sam", 91);
Collection<Integer> con = map.values();
for (Integer score : con) {
System.out.println(score);
}
}
}
运行结果:
(8)keySet()
keySet() 返回Map集合中所有key组成的Set集合
package runtime;
import java.util.HashMap;
import java.util.Set;
public class Goat { //代码示例9
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("Tom", 100);
map.put("Jim", 90);
map.put("Sam", 91);
Set<String> set = map.keySet();//将key作为元素转存入一个set集合。
for (String key : set) {
System.out.println(key + " " + map.get(key));//遍历HashMap集合中的key和value
}
}
}
(9)entrySet()
entrySet() 将Map集合每个key-value转换为一个Entry对象并返回由所有的Entry对象组成的Set集合
package runtime;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;
public class Goat { //代码示例10
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("Tom", 100);
map.put("Jim", 90);
map.put("Sam", 91);
Set<Entry<String, Integer>> set = map.entrySet();//将每一组key-value变为一个entry对象存入set集合
for (Entry<String, Integer> entry : set) {
System.out.println(entry.getKey() + ":" + entry.getValue());//遍历key-value
}
}
}
(10)iterator 迭代器
在前两篇博客Java中的HashSet的常用方法总结和ArrayList的常用方法中已经两次提到了迭代器,它普遍被用于集合中元素的遍历,而HashMap集合元素的遍历方式除了以上提过的两种方式,还有两种与iterator迭代器结合的遍历方式。
a、与get()方法结合:
package runtime;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class Goat {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("Tom", 100);
map.put("Jim", 90);
map.put("Sam", 91);
Set<String> set = map.keySet();
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
String key = iterator.next();//将下一位置的"真key"赋给局部变量"假key"
System.out.println(key + " " + map.get(key));
}
}
}
运行结果:
b、与entry对象结合:
package runtime;
import java.util.HashMap;//引包
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;
public class Goat {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("Tom", 100);
map.put("Jim", 90);
map.put("Sam", 91);
Set<Entry<String,Integer>> set = map.entrySet();
Iterator<Entry<String, Integer>> iterator = set.iterator();
while (iterator.hasNext()) {
Entry<String, Integer> entry = iterator.next();//相当于把所有entry对象向前提一个
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
}
运行结果: