java打卡学习6:集合框架 Collection

集合框架概述

集合框架(Collection Framework)是Java中用于存储、操作和传输数据的标准化架构。它提供了一组接口、实现类和算法,用于处理对象集合,简化了数据结构的操作。

核心目标

  • 性能优异:提供不同数据结构的实现(如数组、链表、哈希表、树),以满足不同场景的性能需求。

  • 互操作性:不同集合类型之间的交互有统一的接口规范。

  • 易学易用 :API 设计清晰,方法命名一致(如 addremovesize)。

与数组的区别

特性 数组 集合
长度 固定 动态可变
存储类型 基本类型 + 对象 只能存储对象(基本类型需包装类)
功能 简单,仅有 length 属性 丰富,提供排序、查找、同步等高级功能

核心接口

  • Collection :根接口,定义了通用方法(如add(), remove(), size())。
  • List :有序集合,允许重复元素(如ArrayList, LinkedList)。
  • Set :无序集合,不允许重复元素(如HashSet, TreeSet)。
  • Queue :队列结构,支持先进先出(FIFO)操作(如PriorityQueue)。
  • Map :键值对存储,独立于Collection接口(如HashMap, TreeMap)。

常用实现类

  • ArrayList:基于动态数组,适合随机访问。
  • LinkedList:基于双向链表,适合频繁插入/删除。
  • HashSet:基于哈希表,快速查找,无序。
  • TreeSet:基于红黑树,元素自动排序。
  • HashMap :键值对存储,允许null键/值。
  • LinkedHashMap:保持插入顺序或访问顺序。

示例代码

java 复制代码
// List示例  
List<String> list = new ArrayList<>();  
list.add("Java");  
list.add("Python");  
System.out.println(list); // 输出: [Java, Python]  

// Set示例  
Set<Integer> set = new HashSet<>();  
set.add(10);  
set.add(20);  
set.add(10); // 重复元素不会被添加  
System.out.println(set); // 输出: [20, 10]  

// Map示例  
Map<String, Integer> map = new HashMap<>();  
map.put("A", 1);  
map.put("B", 2);  
System.out.println(map.get("A")); // 输出: 1  

工具类

  • Collections :提供静态方法(如排序sort()、反转reverse())。
  • Arrays :处理数组与集合的转换(如asList())。

注意事项

  • 线程安全:多数集合类非线程安全,需使用Collections.synchronizedList()或并发包(如ConcurrentHashMap)。
  • 性能选择:根据场景选择实现类(如频繁查询用ArrayList,频繁修改用LinkedList)。

List 体系(重点)

特点:有序、可重复、有下标

常用实现类:

  1. ArrayList

    • 底层:动态数组
    • 优点:查询快、遍历快
    • 缺点:增删慢(要移动元素)
    • 线程不安全
  2. LinkedList

    • 底层:双向链表
    • 优点:增删快
    • 缺点:查询慢
    • 可当作栈、队列、双端队列
  3. Vector

    • 底层数组,线程安全,效率低,基本不用

Set 体系(重点)

特点:无序、不可重复、无索引

常用实现类:

  1. HashSet

    • 底层:HashMap(哈希表)
    • 去重原理:hashCode() + equals()
    • 无序、高效
  2. LinkedHashSet

    • 底层:哈希表 + 双向链表
    • 保证:插入有序 + 去重
  3. TreeSet

    • 底层:红黑树
    • 特点:自动排序(自然排序 / 比较器排序)
    • 去重:根据比较结果是否为 0

遍历方式(Collection 通用)

  1. 迭代器 Iterator(最通用)

    Iterator it = coll.iterator();
    while (it.hasNext()) {
    String s = it.next();
    }

  2. 增强 for 循环

    for (String s : coll) { }

  3. forEach + Lambda(JDK8+)

    coll.forEach(s -> System.out.println(s));

选择建议(面试/开发实用):

相关推荐
数智化管理手记1 小时前
海量数据如何沉淀有效数据资产?数据标准化治理方案如何搭建?
java·大数据·人工智能
何事误红尘1 小时前
Mqtt学习笔记(一):Mosquitto服务器搭建、MQTTX安装测试
学习
cfm_29142 小时前
SpringAI + Ollama 本地大模型
java·开发语言·人工智能·语言模型
青山是哪个青山2 小时前
LangChain 学习笔记(三):LangSmith 调试与监控
笔记·学习·langchain
鲸采云SRM采购管理系统3 小时前
采购管理系统哪家好?2026最新测评对比
java·服务器·数据库
那年窗外下的雪.3 小时前
AIDC 学习日志 第 04 天 BGP Underlay 基础与路由选择
服务器·学习·php
0x533 小时前
Java网络编程(二)
java·服务器·网络
蒸蒸yyyyzwd4 小时前
cpp选手备战后端学习笔记day6 秋招笔试题
笔记·学习
Flittly4 小时前
【雕虫大技】Agent 动态 Skill 供应链安全加固(三):输出校验与治理闭环实战
java·spring boot·spring
Poo_Chai4 小时前
QT emit信号后完整处理流程,包括槽函数响应流程
java·开发语言·数据库