文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Spring Boot 中 Map 的优秀实践

2024-11-28 13:44

关注

什么是 Map?

Map 是一种存储键值对的数据结构,其中每个键都是唯一的。它允许通过键来访问对应的值。在 Java 中,Map 是一个接口,它有多个实现类,最常见的实现类是 HashMap 和 TreeMap。

Map 的基本操作:

Spring Boot 中常见的 Map 使用场景

在 Spring Boot 中,Map 被广泛应用于以下场景:

选择合适的 Map 实现

Java 提供了多种 Map 实现类,每种实现有不同的特性和使用场景。常见的实现类包括:

HashMap:

TreeMap:

LinkedHashMap:

ConcurrentHashMap:

选择依据:

Map 的初始化与赋值

在 Spring Boot 中,我们可以通过多种方式初始化 Map。这里是一些常见的初始化方式:

(1) 使用构造函数初始化

import java.util.HashMap;
import java.util.Map;

public class MapExample {
    public static void main(String[] args) {
        Map map = new HashMap<>();
        map.put("name", "Spring Boot");
        map.put("version", "2.5.0");
        System.out.println(map);
    }
}

(2) 使用静态初始化块初始化

import java.util.Map;
import java.util.HashMap;

public class MapExample {
    private static final Map map = new HashMap() {{
        put("name", "Spring Boot");
        put("version", "2.5.0");
    }};
    
    public static void main(String[] args) {
        System.out.println(map);
    }
}

(3) 使用 Java 8 的 Map.of 初始化

import java.util.Map;

public class MapExample {
    public static void main(String[] args) {
        Map map = Map.of(
            "name", "Spring Boot",
            "version", "2.5.0"
        );
        System.out.println(map);
    }
}

Map 的常见操作

添加键值对:

Map map = new HashMap<>();
map.put("one", 1);
map.put("two", 2);

获取值:

Integer value = map.get("one");
System.out.println("Value for 'one': " + value);

检查是否包含某个键:

boolean containsKey = map.containsKey("one");
System.out.println("Contains key 'one': " + containsKey);

删除键值对:

map.remove("one");
System.out.println("After removal: " + map);

遍历 Map:

map.forEach((key, value) -> System.out.println(key + ": " + value));

Spring Boot 中的 Map 配置

Spring Boot 提供了丰富的配置功能,特别是在 application.properties 或 application.yml 文件中,可以直接将配置信息存储为 Map 类型的结构。

1.配置示例

假设我们在 application.yml 中配置了如下的数据库信息:

database:
  urls:
    - "jdbc:mysql://localhost:3306/db1"
    - "jdbc:mysql://localhost:3306/db2"
  username: "user"
  password: "password"

然后我们可以使用 @ConfigurationProperties 注解将其绑定到 Map 中:

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import java.util.List;
import java.util.Map;

@Configuration
@ConfigurationProperties(prefix = "database")
public class DatabaseConfig {
    private List urls;
    private String username;
    private String password;

    public List getUrls() {
        return urls;
    }

    public void setUrls(List urls) {
        this.urls = urls;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

2.配置绑定到 Map

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.util.Map;

@Configuration
@ConfigurationProperties(prefix = "database")
public class DatabaseConfig {
    private Map urls;

    public Map getUrls() {
        return urls;
    }

    public void setUrls(Map urls) {
        this.urls = urls;
    }
}

Map 的线程安全问题与解决方案

在多线程环境中,Map 的线程安全性问题可能会导致不一致的结果。Java 提供了 ConcurrentHashMap 来解决这些问题。

使用 ConcurrentHashMap:

import java.util.concurrent.ConcurrentHashMap;

public class ThreadSafeMap {
    public static void main(String[] args) {
        Map map = new ConcurrentHashMap<>();
        map.put("name", "Spring Boot");
        map.put("version", "2.5.0");

        // 多线程操作时,保证线程安全
    }
}

结语

通过以上的讲解,希望能够帮助你更好地理解和使用 Spring Boot 中的 Map,在开发中避免常见问题,提高开发效率。

来源:源话编程内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯