Java.util包全面解析:从基础使用到高级技巧
Java.util是Java标准库中最核心的包之一,提供了丰富的数据结构和工具类。本文全面解析了集合框架的四大核心接口(List、Set、Map、Queue),详细介绍了Arrays、Collections、Random、Scanner等实用工具类的使用方法,并提供了完整的代码示例。同时强调了Java 8之后日期时间处理的最佳实践,以及多线程环境下的注意事项,为Java开发者提供了一份实用的技术参考指南。
java.util是Java标准库中最重要的包之一,包含了大量实用的工具类和数据结构,是Java编程的基础。
主要组成部分
1. 集合框架 (Collection Framework)
1、List - 有序集合
2、Set - 不重复集合
3、Map - 键值对映射
4、Queue - 队列
2. 日期时间类
1、Date, Calendar (Java 8之前)
2、注意:Java 8推荐使用java.time包
3. 实用工具类
1、Arrays - 数组操作
2、Collections - 集合操作
3、Random - 随机数生成
4、Scanner - 输入解析
示例代码
1. List使用示例
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class ListExample {
public static void main(String[] args) {
// ArrayList示例
List<String> arrayList = new ArrayList<>();
arrayList.add("Apple");
arrayList.add("Banana");
arrayList.add("Orange");
System.out.println("ArrayList: " + arrayList);
System.out.println("第二个元素: " + arrayList.get(1));
// LinkedList示例
List<Integer> linkedList = new LinkedList<>();
linkedList.add(10);
linkedList.add(20);
linkedList.add(30);
System.out.println("LinkedList: " + linkedList);
}
}2. Set使用示例
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;
public class SetExample {
public static void main(String[] args) {
// HashSet - 无序
Set<String> hashSet = new HashSet<>();
hashSet.add("Java");
hashSet.add("Python");
hashSet.add("C++");
hashSet.add("Java"); // 重复元素不会被添加
System.out.println("HashSet: " + hashSet);
// TreeSet - 有序
Set<String> treeSet = new TreeSet<>();
treeSet.add("Orange");
treeSet.add("Apple");
treeSet.add("Banana");
System.out.println("TreeSet: " + treeSet);
}
}3. Map使用示例
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
public class MapExample {
public static void main(String[] args) {
// HashMap示例
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("Alice", 25);
hashMap.put("Bob", 30);
hashMap.put("Charlie", 28);
System.out.println("HashMap: " + hashMap);
System.out.println("Alice的年龄: " + hashMap.get("Alice"));
// 遍历Map
for (Map.Entry<String, Integer> entry : hashMap.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}4. Queue使用示例
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Queue;
public class QueueExample {
public static void main(String[] args) {
// LinkedList作为队列
Queue<String> queue = new LinkedList<>();
queue.offer("第一");
queue.offer("第二");
queue.offer("第三");
System.out.println("队列: " + queue);
System.out.println("出队: " + queue.poll());
System.out.println("当前队首: " + queue.peek());
// 优先队列
Queue<Integer> priorityQueue = new PriorityQueue<>();
priorityQueue.offer(30);
priorityQueue.offer(10);
priorityQueue.offer(20);
System.out.println("优先队列: " + priorityQueue);
while (!priorityQueue.isEmpty()) {
System.out.println("出队: " + priorityQueue.poll());
}
}
}5. Arrays和Collections工具类
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class UtilitiesExample {
public static void main(String[] args) {
// Arrays工具类
int[] numbers = {5, 2, 8, 1, 9};
System.out.println("原始数组: " + Arrays.toString(numbers));
Arrays.sort(numbers);
System.out.println("排序后: " + Arrays.toString(numbers));
// Collections工具类
List<String> list = Arrays.asList("C", "A", "B", "D");
System.out.println("原始列表: " + list);
Collections.sort(list);
System.out.println("排序后: " + list);
Collections.shuffle(list);
System.out.println("打乱后: " + list);
}
}6. Random和Scanner
import java.util.Random;
import java.util.Scanner;
public class RandomScannerExample {
public static void main(String[] args) {
// Random示例
Random random = new Random();
System.out.println("随机整数: " + random.nextInt(100));
System.out.println("随机布尔值: " + random.nextBoolean());
// Scanner示例
Scanner scanner = new Scanner(System.in);
System.out.print("请输入您的姓名: ");
String name = scanner.nextLine();
System.out.print("请输入您的年龄: ");
int age = scanner.nextInt();
System.out.println("你好," + name + "! 你今年" + age + "岁。");
scanner.close();
}
}7. 日期时间 (传统方式)
import java.util.Calendar;
import java.util.Date;
public class DateTimeExample {
public static void main(String[] args) {
// Date类
Date now = new Date();
System.out.println("当前时间: " + now);
// Calendar类
Calendar calendar = Calendar.getInstance();
System.out.println("年: " + calendar.get(Calendar.YEAR));
System.out.println("月: " + (calendar.get(Calendar.MONTH) + 1)); // 月份从0开始
System.out.println("日: " + calendar.get(Calendar.DAY_OF_MONTH));
}
}重要特性
1、泛型支持 - 提供类型安全
2、自动装箱/拆箱 - 基本类型和包装类型的自动转换
3、迭代器模式 - 统一的集合遍历方式
4、算法工具 - 排序、搜索等常用算法
注意事项
1、Java 8开始,推荐使用java.time包处理日期时间
2、在多线程环境下使用Collections.synchronizedXXX()方法创建线程安全集合
3、考虑使用ConcurrentHashMap等并发集合替代同步包装
java.util包为Java开发者提供了丰富的数据结构和工具类,是日常编程中不可或缺的部分。
最后更新于4月前
本文由人工编写,AI优化,转载请注明原文地址: Java.util包完整使用指南:集合框架与工具类详解
推荐阅读
评论 (6)
发表评论
昵称:加载中...
凯文Kevin2025-12-06 15:30:00
这篇指南对java.util包的梳理很清晰,示例也很实用,帮我理清了集合框架的结构。感谢作者的整理!有个小疑问:在实际项目中,选择ArrayList和LinkedList的主要考量因素有哪些呢?
超腾开源2025-12-06 21:01:52
在实际项目中,选择ArrayList和LinkedList的主要考量因素是性能和内存。ArrayList基于动态数组,随机访问快(O(1)),通过索引直接定位元素。LinkedList:基于双向链表,随机访问慢(O(n)),需要遍历节点。ArrayList尾部插入快(O(1),扩容时O(n)),中间/头部插入慢(O(n),需要移动元素),删除操作类似。LinkedList任意位置插入/删除快(O(1),前提是已定位到位置),但定位本身可能消耗O(n)。在内存方面,使用ArrayList内存连续,缓存友好,但是有容量预留,可能浪费空间。LinkedList每个元素有额外开销(前后指针);内存分散,缓存不友好。
莉莉Sherry2025-11-30 17:26:59
这篇指南对Java初学者太有用了!集合框架的分类很清晰,示例代码也很实用。不过如果能再讲讲HashMap和HashSet的性能差异就更好了,感谢作者的整理!
超腾开源2025-11-30 22:00:15
在大多数操作(添加、删除、查找)上,HashMap 和 HashSet 的性能在理论上是相同的,都是 O(1) 的平均时间复杂度。然而,由于它们的设计目的和内部数据结构不同,在实际使用中,HashSet 通常会比 HashMap 稍微快一点点,并且更节省内存。这是因为 HashSet 本质上是一个简化版的 HashMap。
大卫王2025-11-15 12:58:06
很详细的Java.util包指南!示例代码特别实用,让我对集合框架的理解更深入了。感谢作者的整理和分享!
可可西里2025-11-07 17:59:11
这篇指南对Java初学者太友好了!集合框架这部分讲得很清楚,特别是List、Set、Map的对比示例。不过有个疑问:在实际项目中,ArrayList和LinkedList到底该怎么选择?我上次做项目就因为没选对导致性能问题。另外如果能补充些Java 8新特性的使用示例就更完美了。