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

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

相关推荐
曹牧2 小时前
Tomcat连接池异常排查
java·tomcat
rafael(一只小鱼)2 小时前
如何解决报错wmic不是内部或外部命令--kafka场景下
windows·分布式·kafka
wh_xia_jun2 小时前
Windows/Linux 自动适配 + Pydantic Settings 配置
linux·运维·windows
cool32002 小时前
Kubernetes集群节点扩容实战-kubeasz
java·开发语言·kubernetes
稻草猫.2 小时前
Spring AOP
java·后端·spring·java-ee·idea
Miki Makimura2 小时前
Redis基础指令学习
数据库·redis·学习
第二只羽毛2 小时前
C++ 高并发内存池4
java·大数据·linux·c++·算法
有一个好名字2 小时前
常用注册中心大全(主流 5 个)介绍
java
忙什么果2 小时前
transformer学习笔记1
笔记·学习·transformer