花几千上万学习Java,真没必要!(三十五)

news2024/9/17 8:58:04

1、Map:

 

Map接口的基本且常用的操作,用于管理键值对集合。

V put(K key, V value)
作用:向映射中添加一个键值对。
参数:K key 是键的类型,V value 是与键关联的值。
返回值:如果映射以前包含该键的映射关系,则返回旧值(即替换前的值)。如果映射不包含该键的映射关系,则返回null。
键是唯一的,如果尝试添加一个已经存在的键,则旧值将被新值替换。
V remove(Object key)
作用:从映射中移除与指定键相关联的键值对。
参数:Object key 是要移除的键。
返回值:如果映射包含该键的映射关系,则返回与该键相关联的值;如果不包含,则返回null。
void clear()
作用:从映射中移除所有键值对。
参数:无。
返回值:无。
调用此方法后,映射将为空。
boolean containsKey(Object key)
作用:判断映射中是否包含指定的键。
参数:Object key 是要检查的键。
返回值:如果映射包含该键的映射关系,则返回true;否则返回false。
boolean containsValue(Object value)
作用:判断映射中是否包含指定的值。
参数:Object value 是要检查的值。
返回值:如果映射包含至少一个键值对,其值等于value,则返回true;否则返回false。
此方法可能需要遍历映射中的所有键值对以查找值,因此效率较低。
boolean isEmpty()
作用:判断映射是否为空。
参数:无。
返回值:如果映射不包含任何键值对,则返回true;否则返回false。
int size()
作用:返回映射中键值对的数量。
参数:无。
返回值:映射中键值对的数量。

遍历方式1:

遍历方式2: 

 

测试代码1: 

package maptest.com;
import java.util.HashMap;  
import java.util.Map;  
//put(K key, V value):将指定的值与此映射中的指定键关联(可选操作)。如果此映射以前包含该键的映射,则替换旧值(和键关联的旧值,如果有的话)。
//get(Object key):返回指定键所映射的值;如果此映射不包含该键的映射,则返回null。
//remove(Object key):如果存在一个键的映射,则将其从此映射中移除(可选操作)。
//containsKey(Object key):如果此映射包含指定键的映射,则返回true。
//containsValue(Object value):如果此映射将一个或多个键映射到指定值,则返回true。   
public class HashMapDemo {  
    public static void main(String[] args) {  
        // 创建HashMap实例  
        Map<String, Integer> map = new HashMap<>();  
  
        // 使用put方法添加键值对  
        map.put("Apple", 100);  
        map.put("Banana", 200);  
        map.put("Cherry", 150);  
        map.put("Date", 120);  
        map.put("Elderberry", 180);  
        map.put("Fig", 90); 
        // containsKey方法检查键是否存在  
        System.out.println("Contains Key 'Apple': " + map.containsKey("Apple"));  
  
        // containsValue方法检查值是否存在  
        System.out.println("Contains Value 150: " + map.containsValue(150));  
  
        // isEmpty方法检查Map是否为空  
        System.out.println("Is Map empty? " + map.isEmpty());  
  
        // size方法获取Map的大小  
        System.out.println("Size of Map: " + map.size());  
  
        // remove方法移除键值对  
        Integer removedValue = map.remove("Banana");  
        System.out.println("Removed Value for 'Banana': " + removedValue);  
  
        // 再次检查Map的大小  
        System.out.println("Size of Map after removed: " + map.size());  
  
        // 清空Map  
        map.clear();  
  
        // 再次检查Map是否为空  
        System.out.println("Is Map empty after clear? " + map.isEmpty());  
  
        // 访问一个已被移除的键  
        System.out.println("Value for 'Banana' after clear: " + map.get("Banana")); // 返回null  
    }  
}

运行结果如下:

 

测试代码2:

package maptest.com;
import java.util.HashMap;  
import java.util.Map;
import java.util.Objects;  
//equals()方法,使用Objects.equals()比较name和color,以确保null值也能被正确处理。
//hashCode()方法,使用Objects.hash()生成基于name和color的哈希码。
//确保当两个Cloth对象相等时,它们的哈希码也相同。
//添加与已存在键(基于equals()方法)相同的键时,HashMap会覆盖该键对应的值。
//添加一个与第一个Cloth对象(T-Shirt, White)相同的对象,并改变其价格。
//由于重写了equals()和hashCode()方法,HashMap认为这两个对象是相同的,因此更新价格。
//实际上每次都在创建新的Cloth对象实例。
//实际应用中应该重用相同的对象实例避免不必要的对象创建和内存占用。
class Cloth {  
    private String name;  
    private String color;  
  
    public Cloth(String name, String color) {  
        this.name = name;  
        this.color = color;  
    }    
  
    @Override  
    public boolean equals(Object o) {  
        if (this == o) return true;  
        if (o == null || getClass() != o.getClass()) return false;  
        Cloth cloth = (Cloth) o;  
        return Objects.equals(name, cloth.name) &&  
               Objects.equals(color, cloth.color);  
    }  
  
    @Override  
    public int hashCode() {  
        return Objects.hash(name, color);  
    }  
  
    @Override  
    public String toString() {  
        return "Cloth{" +  
               "name='" + name + '\'' +  
               ", color='" + color + '\'' +  
               '}';  
    }  
}  
  
public class TestMap {  
    public static void main(String[] args) {  
        Map<Cloth, Double> clothesMap = new HashMap<>();  
  
        // 添加元素  
        clothesMap.put(new Cloth("T-Shirt", "White"), 10.0);  
        clothesMap.put(new Cloth("Jeans", "Blue"), 20.0);  
  
        // 添加与第一个对象相同的衣服(基于name和color),会覆盖第一个对象的价格  
        clothesMap.put(new Cloth("T-Shirt", "White"), 15.0); // 创建一个新的Cloth对象,但基于equals和hashCode方法,被视为与第一个相同。 
  
        // 遍历HashMap  
        for (Map.Entry<Cloth, Double> entry : clothesMap.entrySet()) {  
            System.out.println(entry.getKey() + ": $" + entry.getValue());  
        }  
    }  
}

运行结果如下:

 

测试代码3:

package maptest.com;
import java.util.HashMap;  
import java.util.Map;  
// 珠宝首饰类  
class Jewelry {  
    private String name; // 珠宝名称  
    private double price; // 珠宝价格  
  
    public Jewelry(String name, double price) {  
        this.name = name;  
        this.price = price;  
    }  

    public void setName(String name) {
		this.name = name;
	}

	public void setPrice(double price) {
		this.price = price;
	}

	public String getName() {  
        return name;  
    }  
  
    public double getPrice() {  
        return price;  
    }  
  
    @Override  
    public String toString() {  
        return "Jewelry{" +  
               "name='" + name + '\'' +  
               ", price=" + price +  
               '}';  
    }  
}  
  
public class JewelryMapDemo {  
    public static void main(String[] args) {  
        // 使用HashMap存储Jewelry对象,使用String作为key(实际可使用更复杂的唯一标识符)  
        Map<String, Jewelry> jewelryMap = new HashMap<>();  
        jewelryMap.put("Diamond Ring", new Jewelry("Diamond Ring", 5000.0));  
        jewelryMap.put("Gold Necklace", new Jewelry("Gold Necklace", 2000.0));  
        jewelryMap.put("Silver Bracelet", new Jewelry("Silver Bracelet", 300.0));  
        jewelryMap.put("Bracelet", new Jewelry("SilvBracelet", 300.0)); 
        // 1. entrySet()遍历  
        System.out.println("Using entrySet():");  
        for (Map.Entry<String, Jewelry> entry : jewelryMap.entrySet()) {  
            System.out.println(entry.getKey() + ": " + entry.getValue());  
        }  
  
        // 2. keySet()遍历  
        System.out.println("\nUsing keySet():");  
        for (String key : jewelryMap.keySet()) {  
            Jewelry jewelry = jewelryMap.get(key);  
            System.out.println(key + ": " + jewelry);  
        }  
  
        // 3. values()遍历  
        System.out.println("\nUsing values():");  
        for (Jewelry jewelry : jewelryMap.values()) {  
            System.out.println(jewelry);  
        }  
  
        // 4. forEach()方法  
        System.out.println("\nUsing forEach():");  
        jewelryMap.forEach((key, value) -> System.out.println(key + ": " + value));  
  
        // 5. entrySet().stream()  
        System.out.println("\nUsing entrySet().stream():");  
        jewelryMap.entrySet().stream()  
                .forEach(entry -> System.out.println(entry.getKey() + ": " + entry.getValue()));  
    }  
}

运行结果如下:

测试代码4:

package maptest.com;
import java.util.HashMap;  
import java.util.Map;  
import java.util.Set;  
import java.util.Collection;  
  
public class MapWithFlowersExample {  
    public static void main(String[] args) {  
        // 创建HashMap实例,花名作为键,受欢迎程度整数作为值  
        Map<String, Integer> flowerMap = new HashMap<>();  
        flowerMap.put("Rose", 10);  
        flowerMap.put("Tulip", 20);  
        flowerMap.put("Lily", 15);  
        flowerMap.put("Chrysanthemum", 5);  
        flowerMap.put("Sunflower", 30);  
  
        // get方法根据键获取值  
        Integer value = flowerMap.get("Tulip");  
        System.out.println("Value for 'Tulip': " + value);  
  
        // keySet方法获取所有键的集合  
        Set<String> keys = flowerMap.keySet();  
        System.out.println("Keys: " + keys);  
  
        // values方法获取所有值的集合  
        Collection<Integer> values = flowerMap.values();  
        System.out.println("Values: " + values);  
  
        // entrySet方法获取所有键值对对象的集合  
        Set<Map.Entry<String, Integer>> entries = flowerMap.entrySet();  
        for (Map.Entry<String, Integer> entry : entries) {  
            System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());  
        }  
  
        // 查找并打印最受欢迎的花(值最大的那个)  
        String mostPopularFlower = null;  
        int maxValue = Integer.MIN_VALUE;  
        for (Map.Entry<String, Integer> entry : entries) {  
            if (entry.getValue() > maxValue) {  
                maxValue = entry.getValue();  
                mostPopularFlower = entry.getKey();  
            }  
        }  
        System.out.println("Most popular flower: " + mostPopularFlower + " with value " + maxValue);  
    }  
}

运行结果如下:

 

2、 LinkedHashMap:

package maptest.com;
import java.util.LinkedHashMap;  
import java.util.Map;  
  
public class LinkedHashMapBagExample {  
    public static void main(String[] args) {  
        // 创建一个 LinkedHashMap 实例,用于存储女士包包。 
        Map<String, String> bags = new LinkedHashMap<>();  
  
        // 向 LinkedHashMap 添加包包  
        bags.put("Clutch Bag", "A small, elegant bag for formal events.");  
        bags.put("Tote Bag", "A large, casual bag with two handles.");  
        bags.put("Shoulder Bag", "A medium-sized bag with a shoulder strap.");  
  
        // 遍历 LinkedHashMap,并打印每个包包及其描述  
        System.out.println("Bags (insertion order):");  
        for (Map.Entry<String, String> entry : bags.entrySet()) {  
            System.out.println(entry.getKey() + ": " + entry.getValue());  
        }  
  
        // 创建一个带有LRU缓存特性的LinkedHashMap  
        // 设置accessOrder为true,并通过重写removeEldestEntry限制大小  
        Map<String, String> lruBags = new LinkedHashMap<String, String>(16, 0.75f, true) {  
            protected boolean removeEldestEntry(Map.Entry<String, String> eldest) {  
                return size() > 3; // 只保留最近的3个包包  
            }  
        };  
  
        // 向 LRU 缓存中添加包包  
        lruBags.put("Backpack", "A versatile bag with straps over both shoulders.");  
        lruBags.put("Satchel Bag", "A structured, often leather, bag with a handle.");  
        lruBags.put("Crossbody Bag", "A small bag worn across the body with a single strap.");  
        lruBags.put("Hobo Bag", "A large, slouchy bag with a long shoulder strap."); // 这将触发removeEldestEntry  
  
        // 遍历 LRU 缓存中的包包  
        System.out.println("\nLRU Bags (access order with LRU cache):");  
        for (Map.Entry<String, String> entry : lruBags.entrySet()) {  
            System.out.println(entry.getKey() + ": " + entry.getValue());  
        }  
  
        // 访问一个包包,以改变其访问顺序  
        lruBags.get("Satchel Bag");  
  
        // 添加一个新的包包。 
        lruBags.put("Messenger Bag", "A bag with a long strap worn across the body.");  
  
        // 再次遍历 LRU 缓存中的包包,查看变化  
        System.out.println("\nLRU Bags after access and insertion:");  
        for (Map.Entry<String, String> entry : lruBags.entrySet()) {  
            System.out.println(entry.getKey() + ": " + entry.getValue());  
        }  
    }  
}

运行结果如下;

 

 

3、集合嵌套之ArrayList嵌套HashMap:

测试代码:

package maptest.com;
import java.util.ArrayList;  
import java.util.HashMap;  
import java.util.List;  
import java.util.Map;  
  
public class NestedHashMapExample {  
    public static void main(String[] args) {  
        // 创建ArrayList存储HashMap  
        List<Map<String, String>> list = new ArrayList<>();  
  
        // 创建第一个HashMap并添加到列表中  
        Map<String, String> map1 = new HashMap<>();  
        map1.put("key1", "value1");  
        map1.put("key2", "value2");  
        list.add(map1);  
  
        // 创建第二个HashMap并添加到列表中  
        Map<String, String> map2 = new HashMap<>();  
        map2.put("keyA", "valueA");  
        map2.put("keyB", "valueB");  
        list.add(map2);  
  
        // 外层循环遍历ArrayList,并打印每个HashMap的内容  
        for (Map<String, String> map : list) {  
            System.out.println("HashMap:");  
            //内层循环遍历每个HashMap中的每个键值对,并打印出来。
            for (Map.Entry<String, String> entry : map.entrySet()) {  
                System.out.println("  " + entry.getKey() + ": " + entry.getValue());  
            }  
        }  
    }  
}

 运行结果如下:

4、集合嵌套之HashMap嵌套ArrayList:

测试代码:

package maptest.com;
import java.util.ArrayList;  
import java.util.HashMap;  

public class NestedArrayListExample {
    public static void main(String[] args) {
        HashMap<String, ArrayList<String>> nestedMap = new HashMap<>();

        ArrayList<String> list1 = new ArrayList<>();
        list1.add("Value1 - List1");
        list1.add("Value2 - List1");

        ArrayList<String> list2 = new ArrayList<>();
        list2.add("Value1 - List2");
        list2.add("Value2 - List2");

        nestedMap.put("Key1", list1);
        nestedMap.put("Key2", list2);

        //增强for循环遍历nestedMap中所有的键,nestedMap.keySet()返回键的集合。
        for (String key : nestedMap.keySet()) {
        	//打印遍历到的键。
            System.out.println("Key: " + key);
            //通过当前key从nestedMap中获取对应的值,即一个ArrayList。
            ArrayList<String> list = nestedMap.get(key);
            //遍历当前键对应的ArrayList中的所有值。
            for (String value : list) {
            	//打印遍历到的值。
                System.out.println("Value: " + value);
            }
        }
    }
}

运行结果如下:

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1962109.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

upload-labs靶场(1-19关)

upload-labs靶场 简介 upload-labs是一个使用php语言编写的&#xff0c;专门收集渗透测试过程中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共19关&#xff0c;每一关都包含着不同上传方式。 注意&#xff1a;能运行<?php phpinfo();?&…

1._专题1_双指针_C++

双指针 常见的双指针有两种形式&#xff0c;一种是对撞指针&#xff0c;一种是左右指针。对撞指针&#xff1a;一般用于顺序结构中&#xff0c;也称左右指针。 对撞指针从两端向中间移动。一个指针从最左端开始&#xff0c;另一个从最右端开始&#xff0c;然后逐渐往中间逼近…

php 一个极简的类例子

https://andi.cn/page/621627.html

WATLOW Power Series SSR User’s Manual

WATLOW Power Series SSR User’s Manual

RTC实时通信技术:GPT-4o急速响应背后的技术浅谈

RTC实时通信技术&#xff1a;GPT-4o急速响应背后的技术浅谈 RTC实时通信技术概述 RTC&#xff08;Real Time Communication&#xff09;&#xff0c;即实时通信技术&#xff0c;是实时音视频通信的简称。其核心在于实现低延迟、高质量的音视频数据传输和处理&#xff0c;广泛…

Java使用POI创建带样式和公式的Excel文件

这篇文章将演示如何使用POI 创建带样式和公式的Excel文件。 代码 import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileOutputStream; import java.io.IOException;public class ExcelDemo {public static void mai…

更换源(局域网没有网的情况)

我们在一个局域网没有网的情况下&#xff0c;可以用我们自己的这个仓库&#xff0c;下载软件 首先下载我们需要的环境&#xff1a; 需要用到的安装包&#xff1a;jdk-8u211-linux-x64.tar.gz &#xff0c;nexus-3.69.0-02-java8-unix.tar.gz 都在官网下载即可 Download Nex…

AV1帧间预测(二):运动补偿

运动补偿(Motion Compensation,MC)是帧间预测最基础的工具&#xff0c;AV1支持两种运动补偿方式&#xff0c;一种是传统的平移运动补偿&#xff0c;另一种是仿射运动补偿。下面分别介绍这两种运动补偿方法。 平移运动补偿 平移运动补偿是最传统的运动补偿方式&#xff0c;H.26…

vscode docker 查看

以root权限启动vscode sudo code --no-sandbox --disable-gpu-sandbox --user-data-dir/root/.vscode/安装docker插件

C++ | Leetcode C++题解之第307题区域和检索-数组可修改

题目&#xff1a; 题解&#xff1a; class NumArray { private:vector<int> tree;vector<int> &nums;int lowBit(int x) {return x & -x;}void add(int index, int val) {while (index < tree.size()) {tree[index] val;index lowBit(index);}}int p…

基于Django与spark的国漫推荐系统

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍每文一语 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 项目介绍 近年来&#xff0c;随着互联网的蓬勃发展&#xff0c;企事业单位对信息的管理提…

数据库安全:MySQL文件权限的安全问题和解决方案

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 这一章节我们需…

Windows本地构建镜像推送远程仓库

下载 Docker Desktop https://smartidedl.blob.core.chinacloudapi.cn/docker/20210926/Docker-win.exe 使用本地docker构建镜像和推送至远程仓库&#xff08;harbor&#xff09; 1、开启docker的2375端口 2、配置远程仓库push镜像可以通过http harbor.soujer.com:5000ps&am…

RabbitMQ快速入门(MQ的概念、安装RabbitMQ、在 SpringBoot 项目中集成 RabbitMQ )

文章目录 1. 补充知识&#xff1a;同步通讯和异步通讯1.1 同步通讯1.2 异步通讯 2. 同步调用的缺点2.1 业务耦合2.2 性能较差2.3 级联失败 3. 什么情况下使用同步调用4. 异步调用5. 异步调用的优点和缺点5.1 异步调用的优点5.1.1 解除耦合&#xff0c;拓展性强5.1.2 无需等待&a…

智能座舱背后主流车机平台(SA8155/SA8295)的高通Hexagon DSP是什么?

智能座舱背后主流车机平台(SA8155/SA8295)的高通Hexagon DSP是什么&#xff1f; 一、高通Hexagon DSP的辉煌发展历程 高通&#xff0c;作为全球领先的无线通信技术创新者&#xff0c;其处理器技术一直走在行业前列。随着智能手机和物联网设备的普及&#xff0c;对处理器性能的…

排序算法:冒泡排序,golang实现

目录 前言 冒泡排序 代码示例 1. 算法包 2. 冒泡排序代码 3. 模拟排序 4. 运行程序 5. 从大到小排序 循环细节 外层循环 内层循环 总结 循环次数测试 假如 10 条数据进行排序 假如 20 条数据进行排序 假如 30 条数据进行排序 冒泡排序的适用场景 1. 数据量非…

大数据-55 Kafka sh脚本使用 与 JavaAPI使用 topics.sh producer.sh consumer.sh kafka-clients

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

WireShark看tcp网速

1、过滤对应的tcp流 2、统计->TCP流图形->窗口尺寸 3、"接收通过窗口值/时间" 可以得到tcp的接收速度

强化学习时序差分算法之Sarsa算法——以悬崖漫步环境为例

1.导入必要的库环境&#xff0c;代码如下所示。 import matplotlib.pyplot as plt import numpy as np from tqdm import tqdm 2.本悬崖漫步环境中无需提供奖励函数以及状态转移函数&#xff0c;而需提供一个与智能体进行交互的step()函数&#xff0c;该函数输入为智能体当前…

Python time模块格式化时间的N种技巧

文末赠免费精品编程资料~~ 是不是经常对着电脑屏幕上的日期时间发呆&#xff0c;心想&#xff1a;“要是能随心所欲地格式化这些数字就好了。”今天&#xff0c;我们就一起探索Python中的时间宝藏——time模块&#xff0c;让你轻松玩转时间显示&#xff0c;从新手进阶为时间格…