当前位置: 首页 > article >正文

java collection集合特点知识点详解

在 Java 中,Collection 是所有集合类的根接口,它定义了一组对象的基本操作。Java 集合框架提供了丰富的实现类(如ListSetQueue),具有以下核心特点:

一、统一的接口设计

1. 核心接口层次
Collection (根接口)
├── List (有序可重复)
├── Set (无序不重复)
└── Queue (队列,FIFO)
  • List:元素有序、可重复,支持索引访问(如ArrayListLinkedList)。
  • Set:元素无序、唯一(如HashSetTreeSet)。
  • Queue:遵循先进先出(FIFO)原则(如LinkedListPriorityQueue)。
2. 共性方法

所有Collection实现类都支持以下操作:

add(E e);        // 添加元素
remove(Object o);// 移除元素
contains(Object o); // 判断是否包含
size();         // 返回元素数量
isEmpty();      // 判断是否为空
clear();        // 清空集合
iterator();     // 获取迭代器
toArray();      // 转换为数组

二、动态扩容机制

  • 自动调整大小:大部分集合类(如ArrayListHashMap)会在元素数量超过容量时自动扩容。
  • 扩容策略
    • ArrayList:初始容量为 10,扩容时新容量 = 旧容量 × 1.5。
    • HashMap:初始容量为 16,负载因子 0.75,扩容时新容量 = 旧容量 × 2。

三、线程安全与非线程安全

1. 非线程安全实现
  • ArrayListHashSetHashMap 等:性能高,但不支持多线程并发访问。
List<String> list = new ArrayList<>(); // 非线程安全
2. 线程安全实现
  • VectorHashtable:早期线程安全类,通过synchronized实现,性能较低。
  • Collections.synchronizedXXX():将非线程安全集合转换为线程安全集合。
List<String> syncList = Collections.synchronizedList(new ArrayList<>());
  • java.util.concurrent 包
    • CopyOnWriteArrayListConcurrentHashMap:高效的线程安全集合,采用写时复制或分段锁机制。

四、高效的迭代与遍历

1. 迭代器(Iterator
  • 所有集合都支持通过iterator()方法获取迭代器,实现统一遍历。
Iterator<String> it = list.iterator();
while (it.hasNext()) {System.out.println(it.next());
}
2. for-each 循环
  • 语法糖,底层依赖迭代器实现。
for (String element : list) {System.out.println(element);
}

五、丰富的数据结构实现

1. List 的实现类
  • ArrayList:基于动态数组,随机访问快(O (1)),插入 / 删除慢(O (n))。
  • LinkedList:基于双向链表,插入 / 删除快(O (1)),随机访问慢(O (n))。
2. Set 的实现类
  • HashSet:基于哈希表,无序,元素唯一。
  • TreeSet:基于红黑树,有序(自然排序或自定义排序)。
  • LinkedHashSet:基于哈希表 + 链表,保持插入顺序。
3. Map 的实现类
  • HashMap:键值对存储,无序,允许null键和null值。
  • TreeMap:基于红黑树,按键有序。
  • LinkedHashMap:保持插入顺序或访问顺序。

六、泛型支持

  • 类型安全:Java 5 引入泛型后,集合可以指定存储的元素类型。
List<String> list = new ArrayList<>(); // 只能存储String类型
list.add("Java");
// list.add(123); // 编译错误

七、与数组的互操作性

  • 集合转数组:通过toArray()方法。
List<String> list = Arrays.asList("A", "B", "C");
String[] array = list.toArray(new String[0]);

数组转集合:通过Arrays.asList()方法。

String[] array = {"A", "B", "C"};
List<String> list = Arrays.asList(array);

八、性能特点对比

操作ArrayListLinkedListHashSetTreeSet
随机访问O(1)O(n)--
插入 / 删除尾部O(1)O(1)O(1)O(log n)
插入 / 删除中间O(n)O(1)--
查找元素O(n)O(n)O(1)O(log n)

九、常见注意事项

  1. null 值处理

    • ArrayListHashMap 允许存储null,而TreeSetTreeMap 不允许(因依赖比较器)。
  2. equals() 和 hashCode()

    • 若元素需存储在HashSetHashMap中,必须正确重写equals()hashCode()方法。
  3. fail-fast 机制

    • 当集合在迭代过程中被修改时,会抛出ConcurrentModificationException

Java 集合框架通过统一接口、丰富实现和高效算法,为开发者提供了灵活且高性能的数据结构选择,适用于各种场景。合理选择集合类型(如ArrayList vs LinkedListHashMap vs TreeMap)是优化代码性能的关键。

http://www.lryc.cn/news/2379910.html

相关文章:

  • ngx_http_realip_module 模块概述
  • 自定义CString类与MFC CString类接口对比
  • 华为OD机试真题——考勤信息(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • Go语言测试用例的执行与分析
  • vue3 vite 路由
  • MyBatis:动态SQL
  • 游戏引擎学习第280天:精简化的流式实体sim
  • femap许可与多用户共享
  • 王树森推荐系统公开课 排序03:预估分数融合
  • 网络I/O学习-poll(三)
  • k8s(12) — 版本控制和滚动更新(金丝雀部署理念)
  • 【git config --global alias | Git分支操作效率提升实践指南】
  • chrome源码中WeakPtr 跨线程使用详解:原理、风险与最佳实践
  • 【Go】从0开始学习Go
  • Windows 安装显卡驱动
  • 模块与包的导入
  • Google设置app-ads.txt
  • docker安装rockerMQ
  • 交叉引用、多个参考文献插入、跨文献插入word/wps中之【插入[1-3]、连续文献】
  • PLC双人舞:profinet转ethernet ip网关奏响施耐德与AB的协奏曲
  • Image and depth from a conventional camera with a coded aperture论文阅读
  • 缺乏团队建设活动,如何增强凝聚力?
  • 特征筛选方法总结
  • 力扣HOT100之二叉树:230. 二叉搜索树中第 K 小的元素
  • pinia.defineStore is not a function
  • 入职软件开发与实施工程师了后........
  • PCL点云库点云数据处理入门系列教材目录(2025年5月更新....)
  • Linux面试题集合(5)
  • python动漫论坛管理系统
  • 【ubuntu24.04】pycharm 死机结束进程