java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java Collection使用

Java Collection 体系与使用场景多角度分析

作者:Elias不吃糖

本文从抽象层级、接口设计和实际使用场景三个角度,系统介绍了Java Collection框架,文章详细说明了Collection的基本概念、Collection在体系中的位置、为什么要有Collection接口以及在不同场景下的使用建议,感兴趣的朋友跟随小编一起看看吧

Java Collection 体系与使用场景整理

本文从抽象层级、接口设计、实际使用场景三个角度,系统说明什么是 Collection,什么时候“面向 Collection 创建对象”,什么时候应直接使用 List,以及何时选择其它集合类型(SetQueueMap 等)。

一、什么是 Collection

1. Collection 的本质

Collection<E>Java 集合框架(Java Collections Framework, JCF)中最基础的集合接口之一,表示:

一组元素(element)的抽象集合

它只关心:

不关心

2. Collection 在体系中的位置

Iterable
   ↑
Collection
   ↑
 ├── List
 ├── Set
 └── Queue

CollectionList / Set / Queue共同父接口,但 不包含索引、顺序、唯一性等语义

二、为什么要有 Collection 这种“看起来没什么用”的接口

1. 抽象层面的意义

Collection 的存在是为了:

示例:

void process(Collection<String> c) {
    for (String s : c) {
        System.out.println(s);
    }
}

这段代码:

2. Collection 的“能力边界”

Collection 刻意不提供以下能力

因为:

三、什么时候“创建 Collection”

重要

Collection 是接口,不能直接 new

真正创建的是:

Collection<String> c = new ArrayList<>();

这里的含义是:

适合使用Collection作为声明类型的场景

场景 1:方法参数(最典型)
void saveAll(Collection<User> users) {
    ...
}

理由

List<User> l = new ArrayList<>();
l.add("b");
l.add("c");
saveAll(l);

这是 最推荐 的使用方式(就是多态的体现)。

场景 2:返回值只表达“一组元素”
Collection<Order> findOrders() {
    return new ArrayList<>();
}

调用方:

场景 3:业务逻辑不关心集合语义
Collection<String> tags = new HashSet<>();

当你只需要:

四、什么时候必须使用 List

List 的核心语义

List<E> 表示:

有序、可重复、可按索引访问的集合

它在 Collection 基础上增加了:

必须使用 List 的典型场景

场景 1:需要索引访问
List<String> list = new ArrayList<>();
String first = list.get(0);

如果你需要 get(i),就不应该使用 Collection 声明。

场景 2:需要顺序语义
List<String> steps = List.of("init", "load", "run");

顺序有业务含义(流程、步骤、时间线)。

场景 3:与 UI / JSON / DTO 强绑定

这些天然是 有序结构,应使用 List

List 的常见实现选择

实现适用场景
ArrayList读多写少、随机访问多(默认首选)
LinkedList频繁头尾插入/删除(但实际很少需要)

五、什么时候使用 Set

Set 的核心语义

Set<E> 表示:

不允许重复元素的集合

典型使用场景

示例:

Set<String> users = new HashSet<>();

常见实现:

六、什么时候使用 Queue / Deque

Queue / Deque 的语义

使用场景

示例:

Queue<Task> q = new ArrayDeque<>();

七、Map 为什么不属于 Collection

Map 的本质

Map<K, V> 表示:

键值对映射,不是“元素集合”

所以:

八、总结

1. 面向接口编程

声明用接口,实现用具体类

List<String> list = new ArrayList<>();
Collection<String> c = new ArrayList<>();

2. 用“最小能力接口”

3. 不要因为“实现是 ArrayList”就暴露 List

// 不推荐
public ArrayList<String> getData() { ... }
// 推荐
public List<String> getData() { ... }

九、一句话总结

接口表达“你需要什么能力”,实现类决定“怎么做到”。

到此这篇关于Java Collection 体系与使用场景整理的文章就介绍到这了,更多相关Java Collection使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文