Day26 HashMap

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);
		}
	}

三、基本用法

  1. 导入HashMap类

    import java.util.HashMap;
    
  2. 创建HashMap对象

    HashMap<String, Integer> map = new HashMap<>();
    
  3. 添加键值对

    map.put("apple", 10);
    map.put("banana", 5);
    map.put("orange", 8);
    
  4. 获取值

    int quantity = map.get("apple"); // 返回键"apple"对应的值
    
  5. 遍历HashMap

    for (String key : map.keySet()) {
        int value = map.get(key);
        System.out.println(key + ": " + value);
    }
    
  6. 检查键是否存在

    boolean containsKey = map.containsKey("apple"); // 检查是否包含键"apple"
    
  7. 删除键值对

    map.remove("banana"); // 删除键"banana"对应的键值对
    
  8. 获取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);
		}
		
	}

相关推荐

  1. Day26 HashMap

    2024-03-26 22:22:05       43 阅读
  2. 24.HashMap的扩容机制

    2024-03-26 22:22:05       42 阅读
  3. <span style='color:red;'>HashMap</span>

    HashMap

    2024-03-26 22:22:05      37 阅读
  4. <span style='color:red;'>HashMap</span>

    HashMap

    2024-03-26 22:22:05      34 阅读
  5. HashMap

    2024-03-26 22:22:05       29 阅读
  6. LeetCode day26

    2024-03-26 22:22:05       81 阅读
  7. Day26:学习SpringCloud

    2024-03-26 22:22:05       40 阅读
  8. Python_day26

    2024-03-26 22:22:05       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-26 22:22:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-26 22:22:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-26 22:22:05       87 阅读
  4. Python语言-面向对象

    2024-03-26 22:22:05       96 阅读

热门阅读

  1. Day26:学习SpringCloud

    2024-03-26 22:22:05       40 阅读
  2. 【Linux】常用搜索命令(五)

    2024-03-26 22:22:05       38 阅读
  3. c++ day2

    c++ day2

    2024-03-26 22:22:05      32 阅读
  4. css的transition详解

    2024-03-26 22:22:05       39 阅读
  5. ChatGPT引领论文写作新潮流

    2024-03-26 22:22:05       44 阅读
  6. Web日志分析

    2024-03-26 22:22:05       29 阅读
  7. ARM IHI0069F GIC architecture specification (2)

    2024-03-26 22:22:05       32 阅读
  8. day8 ARM

    day8 ARM

    2024-03-26 22:22:05      39 阅读
  9. vue js金额转中文

    2024-03-26 22:22:05       43 阅读
  10. 逻辑回归的详解及应用

    2024-03-26 22:22:05       38 阅读
  11. 第二十七章 TypeScript TS进阶用法infer

    2024-03-26 22:22:05       36 阅读