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<String> 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));

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

相关推荐
wljt2 分钟前
SpringBoot学习笔记五:Spring Boot的web开发
spring boot·笔记·学习
Shadow(⊙o⊙)6 分钟前
C++常见错误解析2.0
开发语言·数据结构·c++·后端·学习·算法
京师20万禁军教头6 分钟前
34面向对象(中级)-断点调试
java
谢谢 啊sir9 分钟前
L2-057 姥姥改作业 - java
java·开发语言
将心ONE10 分钟前
pathlib Path函数的使用
java·linux·前端
Royzst10 分钟前
常用APL
java
人道领域13 分钟前
【黑马点评日记】高并发秒杀:库存超卖与锁机制解析
java·开发语言·redis·spring·intellij-idea
Java成神之路-13 分钟前
面试题:Spring事务失效场景
java·spring
阿亮爱学代码14 分钟前
日期与滚动视图
java·前端·scrollview
java1234_小锋14 分钟前
说说MyBatis的工作原理吗?
java·mybatis