Hutool 简单使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、Hutool工具

    Hutool工具类简介

    Hutool是一个Java工具库,提供了丰富的工具方法,涵盖字符串、日期、IO、加密、HTTP等常见操作。在Spring Boot项目中引入Hutool可以简化开发,提升效率。


    Spring Boot集成Hutool

    pom.xml中添加Hutool依赖:

    <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>5.8.16</version>
    </dependency>
    


    常用工具类及示例

    字符串工具(StrUtil)
    // 判断空字符串
    boolean isEmpty = StrUtil.isEmpty(""); // true  
    // 格式化字符串  
    String template = "姓名:{},年龄:{}";  
    String result = StrUtil.format(template, "张三", 25); // "姓名:张三,年龄:25"  
    

    日期工具(DateUtil)
    // 当前日期  
    DateTime now = DateUtil.date();  
    // 日期格式化  
    String format = DateUtil.format(now, "yyyy-MM-dd");  
    // 日期加减  
    DateTime nextWeek = DateUtil.offsetDay(now, 7);  
    

    文件工具(FileUtil)
    // 读取文件内容  
    String content = FileUtil.readUtf8String("/path/to/file.txt");  
    // 写入文件  
    FileUtil.writeUtf8String("Hello Hutool", "/path/to/file.txt");  
    

    HTTP工具(HttpUtil)
    // GET请求  
    String response = HttpUtil.get("https://example.com");  
    // POST请求(表单)  
    HashMap<String, Object> params = new HashMap<>();  
    params.put("key", "value");  
    String postResponse = HttpUtil.post("https://example.com", params);  
    

    加密工具(SecureUtil)
    // MD5加密  
    String md5 = SecureUtil.md5("123456");  
    // AES加密解密  
    String data = "Hello Hutool";  
    String key = "1234567890123456";  
    String encrypt = SecureUtil.aes(key.getBytes()).encryptHex(data);  
    String decrypt = SecureUtil.aes(key.getBytes()).decryptStr(encrypt);  
    

    集合工具(CollUtil)
    List<String> list = CollUtil.newArrayList("A", "B", "C");  
    // 判断集合是否为空  
    boolean empty = CollUtil.isEmpty(list);  
    // 分页  
    List<List<String>> page = CollUtil.page(list, 1, 2);  
    

    JSON工具(JSONUtil)
    // 对象转JSON  
    User user = new User("张三", 25);  
    String json = JSONUtil.toJsonStr(user);  
    // JSON转对象  
    User parsedUser = JSONUtil.toBean(json, User.class);  
    

    缓存工具(SimpleCache)
    Cache<String, String> cache = new SimpleCache<>();  
    cache.put("key", "value");  
    String cachedValue = cache.get("key");  
    


    其他实用工具类

  • IdUtil:生成UUID、雪花ID等。
  • RandomUtil:生成随机数、字符串。
  • BeanUtil:JavaBean属性拷贝。
  • ReflectUtil:反射操作工具。
  • NumberUtil:数字计算(加减乘除、精确计算)。
  • HexUtil:十六进制转换。

  • 注意事项

  • Hutool工具类均为静态方法,无需实例化。
  • 部分工具类(如HTTP、加密)需注意线程安全和性能问题。
  • 详细文档参考Hutool官网

1. 链表类 (LinkedList)

链表是一种线性数据结构,由节点组成,每个节点存储数据和指向下一个节点的引用。它常用于实现动态大小集合,插入和删除操作的平均时间复杂度为 $O(1)$(在已知位置时),但查找需要 $O(n)$。

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class LinkedList:
    def __init__(self):
        self.head = None
    
    def append(self, data):
        """在链表末尾添加一个节点"""
        new_node = Node(data)
        if not self.head:
            self.head = new_node
            return
        last = self.head
        while last.next:
            last = last.next
        last.next = new_node
    
    def display(self):
        """打印链表所有元素"""
        current = self.head
        while current:
            print(current.data, end=" -> ")
            current = current.next
        print("None")

# 示例用法
llist = LinkedList()
llist.append(1)
llist.append(2)
llist.append(3)
llist.display()  # 输出: 1 -> 2 -> 3 -> None

2. 栈类 (Stack)

栈是一种后进先出(LIFO)的数据结构,常用于函数调用、表达式求值等场景。主要操作包括入栈(push)和出栈(pop),时间复杂度均为 $O(1)$。

class Stack:
    def __init__(self):
        self.items = []
    
    def push(self, item):
        """元素入栈"""
        self.items.append(item)
    
    def pop(self):
        """元素出栈并返回"""
        if not self.is_empty():
            return self.items.pop()
        raise IndexError("栈为空")
    
    def is_empty(self):
        """检查栈是否为空"""
        return len(self.items) == 0
    
    def peek(self):
        """返回栈顶元素但不移除"""
        if not self.is_empty():
            return self.items[-1]
        raise IndexError("栈为空")

# 示例用法
stack = Stack()
stack.push(10)
stack.push(20)
print(stack.pop())  # 输出: 20
print(stack.peek())  # 输出: 10

3. 队列类 (Queue)

队列是一种先进先出(FIFO)的数据结构,适用于任务调度、缓冲等场景。入队(enqueue)和出队(dequeue)操作的平均时间复杂度为 $O(1)$。

class Queue:
    def __init__(self):
        self.items = []
    
    def enqueue(self, item):
        """元素入队"""
        self.items.append(item)
    
    def dequeue(self):
        """元素出队并返回"""
        if not self.is_empty():
            return self.items.pop(0)
        raise IndexError("队列为空")
    
    def is_empty(self):
        """检查队列是否为空"""
        return len(self.items) == 0
    
    def size(self):
        """返回队列大小"""
        return len(self.items)

# 示例用法
queue = Queue()
queue.enqueue("A")
queue.enqueue("B")
print(queue.dequeue())  # 输出: A
print(queue.size())     # 输出: 1

这些类都是基础且常用的,您可以根据需要扩展功能(如添加错误处理或更多方法)。如果您有特定场景或想添加其他类(如二叉树或哈希表),请告诉我,我可以继续补充!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值