Day26 HashMap
文章目录
一、应用场景
1、概念: HashMap
是Java集合框架中的一种实现类,用于存储键值对。
2、好处: HashMap
是一个常用的集合类,适用于需要快速查找和插入键值对的场景。通过合理使用HashMap
,可以高效地管理和操作键值对数据 。
二、特点
1、HashMap
基于哈希表实现,提供了快速的查找和插入操作。
2、允许使用null
作为键和值。
3、不保证元素的顺序,即不保证遍历顺序与插入顺序相同。
4、允许键和值都可以重复(键重复会覆盖旧值)。
理解:无序 + key去重
注意:1.HashMap的key不允许重复,Key是唯一的
2.HashMap的value允许重复
代码理解:
public static void main(String[] args) {
//Key是唯一的,(小杨)去重
HashMap<String, Integer> map = new HashMap<>();
map.put("小张", 27);
map.put("小宽", 23);
map.put("小白", 23);
map.put("小杨", 28);
map.put("小杨", 29);
map.put("小杨", 30);
Set<Entry<String,Integer>> entrySet = map.entrySet();
for (Entry<String, Integer> entry : entrySet) {
System.out.println(entry);
}
}
三、基本用法
导入HashMap类:
import java.util.HashMap;
创建HashMap对象:
HashMap<String, Integer> map = new HashMap<>();
添加键值对:
map.put("apple", 10); map.put("banana", 5); map.put("orange", 8);
获取值:
int quantity = map.get("apple"); // 返回键"apple"对应的值
遍历HashMap:
for (String key : map.keySet()) { int value = map.get(key); System.out.println(key + ": " + value); }
检查键是否存在:
boolean containsKey = map.containsKey("apple"); // 检查是否包含键"apple"
删除键值对:
map.remove("banana"); // 删除键"banana"对应的键值对
获取HashMap大小:
int size = map.size(); // 返回HashMap中键值对的数量
代码理解:
public class Test01 {
/**
* 知识点:HashMap的使用
*/
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
//添加元素
map.put("小希", 27);
map.put("小空", 23);
map.put("小丽", 28);
map.put("小光", 36);
map.put("小田", 32);
map.put("小阳", 28);
map.put("小波", 28);
//将newMap中所有的元素添加到map集合中
HashMap<String, Integer> newMap = new HashMap<>();
newMap.put("aaa", 10);
newMap.put("bbb", 20);
newMap.put("ccc", 30);
newMap.put("ddd", 40);
map.putAll(newMap);
//如果key存在就获取value值,如果不存在就添加
Integer putIfAbsent = map.putIfAbsent("小希111", 28);
System.out.println("putIfAbsent:" + putIfAbsent);
//通过Key获取到对应的Value
Integer integer1 = map.get("小丽");
System.out.println("通过Key获取对应的value:" + integer1);//28
//通过Key获取对应的value,如果key不存在则返回默认值
Integer integer2 = map.getOrDefault("小希111", 888);
System.out.println("通过Key获取对应的value:" + integer2);//888
//清空集合中的元素
//map.clear();
System.out.println("判断集合中是否有指定的key:" + map.containsKey("小希"));//true
System.out.println("判断集合中是否有指定的value:" + map.containsValue(27));//true
System.out.println("判断集合中是否没有元素:" + map.isEmpty());//false
//通过key删除映射关系(key+value)
map.remove("aaa");
//通过key+value删除映射关系(key+value)
map.remove("bbb", 20);
//通过key替换value
map.replace("小希", 30);
//通过key+value替换value
map.replace("小空", 23, 25);
//获取映射关系的个数(映射关系内包含了key和value)
int size = map.size();
System.out.println("获取映射关系的个数:" + size);//10
//获取map中所有的value
Collection<Integer> values = map.values();
System.out.println(Arrays.toString(values.toArray()));//将集合转换为数组,再将数组转换为字符串
System.out.println("-----------------------");
//遍历 -- keySet()
//思路:获取map集合中所有的key放在一个Set集合中,遍历Set集合获取出key,再通过key获取到Map集合中对应的value
Set<String> keySet = map.keySet();
for (String key : keySet) {
Integer value = map.get(key);
System.out.println(key + " -- " + value);
}
System.out.println("-----------------------");
//遍历 -- entrySet()
//思路:获取map集合中所有的映射关系对象放在一个Set集合中,遍历Set集合获取出映射关系对象(Key+Value)
Set<Entry<String,Integer>> entrySet = map.entrySet();
for (Entry<String, Integer> entry : entrySet) {
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println(key + " -- " + value);
}
}
}
四、面试题
需求:针对于HashMap的value排序
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
map.put("小希", 27);
map.put("小空", 23);
map.put("小丽", 28);
map.put("小光", 36);
map.put("小田", 32);
map.put("小阳", 28);
map.put("小波", 28);
//将map的映射关系对象取出,返回Set集合
Set<Entry<String,Integer>> entrySet = map.entrySet();
//将Set集合转换为ArrayList集合
ArrayList<Entry<String,Integer>> list = new ArrayList<>(entrySet);
//利用ArrayList的sort方法去排序
list.sort(new Comparator<Entry<String,Integer>>() {
@Override
public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
Integer v1 = o1.getValue();
Integer v2 = o2.getValue();
return Integer.compare(v1, v2);
}
});
//遍历ArrayList
for (Entry<String, Integer> entry : list) {
System.out.println(entry);
}
}