15.集合框架的学习

一、简介

集合框架(Collection Framework) 是 Java 提供的一套用于存储、操作和处理数据集合的标准化架构。它主要位于
java.util 包中,提供了一组 接口实现类,用于操作不同类型的数据集合,如列表(List)、集合(Set)和映射(Map)等。

Java集合框架位于java.util包中
Collection是Set和List的父类,Collections是工具类,提供了对集合进行排序、遍历等多种算法的实现。
ArrayList: 有序(放进去顺序和拿出来顺序一致),可重复
HashSet: 无序(放进去顺序和拿出来顺序不一定一致),不可重复

1. 集合框架的核心组件

Java 集合框架主要由 接口实现类算法 组成。

(1)核心接口

Java 集合框架中最重要的接口有:

  • Collection 接口(顶级接口,List 和 Set 继承自它)
    • List(列表):有序,可重复(如 ArrayList、LinkedList)
    • Set(集合):无序,元素唯一(如 HashSet、TreeSet)
    • Queue(队列):按特定顺序处理元素(如 LinkedList、PriorityQueue)
  • Map(映射):键值对存储,不允许键重复(如 HashMap、TreeMap)

(2)主要实现类

|-----------|-----------------------------------|------------------|
| 接口 | 主要实现类 | 特点 |
| List | ArrayList 、 LinkedList 、 Vector | 有序,可重复 |
| Set | HashSet 、 LinkedHashSet 、 TreeSet | 无序(或排序),不重复 |
| Queue | PriorityQueue 、 ArrayDeque | 先进先出(FIFO)或优先级处理 |
| Map | HashMap 、 LinkedHashMap 、 TreeMap | 键值对存储,不允许键重复 |

java 复制代码
@Test
public void test1() {
    //数组最大问题是长度固定,而且要操作下标
    Student[] array = new Student[3];

    ArrayList<Student> list = new ArrayList<>();
    Student student1 = new Student();
    Student student2 = new Student();
    Student student3 = new Student();
    Student student4 = new Student();
    list.add(student1);
    list.add(student2);
    list.add(student3);
    list.add(student4);
    list.add(student1);

    //有序可重复
    //有序:你放进去的顺序和拿出来的顺序一致
    //ArrayList<String> list1 = new ArrayList<>();
    List<String> list1 = new ArrayList<>();
    list1.add("Java");
    list1.add("UI");
    list1.add("H5");
    list1.add("H5");
    list1.add("aa");
    for (String str : list1) {
        System.out.println(str);
    }
    System.out.println("-------------------");
    //无序不重复
    //无序:放进去顺序和拿出来的顺序可能是不一致的
    //HashSet<String> set = new HashSet<String>();
    Set<String> set = new HashSet<>();
    set.add("Java");
    set.add("UI");
    set.add("H5");
    set.add("H5");
    set.add("aa");
    for (String str : set) {
        System.out.println(str);
    }
}

注意:

jdk1.7版本之前创建集合对象必须把前后的泛型都写上

ArrayList list = new ArrayList();

jdk1.7版本之后,=号后面的泛型可以省略,后面的泛型可以根据前面的泛型推导出来

ArrayList list = new ArrayList<>();

二、ArrayList和LinkedList区别

队列

java 复制代码
LinkedList linkedList = new LinkedList();
linkedList.addFirst("A");
linkedList.removeFirst();
linkedList.addLast("B");
linkedList.removeLast();

ArrayList和LinkedList的大致区别如下:

  1. ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
  2. 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
  3. 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

ArrayList内部是使用可増长数组实现的,所以是用get和set方法是花费常数时间的,但是如果插入元素和删除元素,

除非插入和删除的位置都在表末尾,否则代码开销会很大,因为里面需要数组的移动。

LinkedList是使用双链表实现的,所以get会非常消耗资源,除非位置离头部很近。但是插入和删除元素花费常数时间。

三、队列

Queue先进先出 FIFO Firt In First Out

客服电话、12306排队买票、滴滴打车

java 复制代码
LinkedList linkedList = new LinkedList();
linkedList.addLast("A");
linkedList.addLast("B");
linkedList.addLast("C");
linkedList.removeFirst();

四、Map

1、Map

Map key,value

Set> set = map.entrySet();

map.keySet();

Map接口

1、Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。

2、Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。

3、Collection中的集合称为单列集合,Map中的集合称为双列集合。

4、需要注意的是,Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。

5、Map中常用的集合为HashMap集合、LinkedHashMap集合。

Map接口中的常用方法

java 复制代码
public static void main(String[] args) {
    // 创建Map对象
    Map<String, String> map = new HashMap<String, String>();
    // 给map中添加元素
    map.put("星期一", "Monday");
    map.put("星期日", "Sunday");
    System.out.println(map); // {星期日=Sunday, 星期一=Monday}
    // 根据指定的key获取对应的value
    String en = map.get("星期日");
    System.out.println(en); // Sunday
    // 根据key删除元素,会返回key对应的value值
    String value = map.remove("星期日");
    System.out.println(value); // Sunday
    System.out.println(map); // {星期一=Monday}
}

2、Map集合遍历键找值方式:

1、keySet

键找值方式:即通过元素中的键,获取键所对应的值

1.获取Map集合中所有的键,由于键是唯一的,所以返回一个Set集合存储所有的键

2.遍历键的Set集合,得到每一个键

3.根据键,获取键所对应的值

java 复制代码
public void test1() {
    // 创建Map对象
    Map<String, String> map = new HashMap<String, String>();
    // 给map中添加元素
    map.put("邓超", "孙俪");
    map.put("李晨", "范冰冰");
    map.put("刘德华", "柳岩");
    // 获取Map中的所有key
    Set<String> keySet = map.keySet();
    // 遍历存放所有key的Set集合
    Iterator<String> it = keySet.iterator();
    while (it.hasNext()) {
        // 得到每一个key
        String key = it.next();
        // 通过key获取对应的value
        String value = map.get(key);
        System.out.println(key + "=" + value);
    }
}
2、entrySet

Map集合遍历键值对方式

键值对方式:即通过集合中每个键值对(Entry)对象,获取键值对(Entry)对象中的键与值。

操作步骤与图解:

1.获取Map集合中,所有的键值对(Entry)对象,以Set集合形式返回。

2.遍历包含键值对(Entry)对象的Set集合,得到每一个键值对(Entry)对象

3.通过键值对(Entry)对象,获取Entry对象中的键与值。

注意:Map集合不能直接使用迭代器或者foreach进行遍历。但是转成Set之后就可以使用了**↓**

java 复制代码
@Test
public void test1() {
    Map<String, String> map = new HashMap<>();
    map.put("cn", "中国");
    map.put("us", "美国");
    map.put("uk", "英国");
    Set<Map.Entry<String, String>> entrySet = map.entrySet();
    for (Map.Entry<String, String> entry : entrySet) {
        System.out.println(entry.getKey() + " : " + entry.getValue());
    }
    System.out.println("-----------");
    String country = map.get("cn");
    System.out.println(country);
    System.out.println("-----------");
    Set<String> keySet = map.keySet();
    for (String key : keySet) {
        System.out.println(key + " : " + map.get(key));
    }
}

@Test
public void test2() {
    // 创建Map对象
    Map<String, String> map = new HashMap<String, String>();
    // 给map中添加元素
    map.put("邓超", "孙俪");
    map.put("李晨", "范冰冰");
    map.put("刘德华", "柳岩");
    // 获取Map中的所有key与value的对应关系
    Set<Map.Entry<String, String>> entrySet = map.entrySet();
    // 遍历Set集合
    Iterator<Map.Entry<String, String>> it = entrySet.iterator();
    while (it.hasNext()) {
        // 得到每一对对应关系
        Map.Entry<String, String> entry = it.next();
        // 通过每一对对应关系获取对应的key
        String key = entry.getKey();
        // 通过每一对对应关系获取对应的value
        String value = entry.getValue();
        System.out.println(key + "=" + value);
    }
}
相关推荐
腻害兔4 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
码智社5 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
克里斯蒂亚诺更新5 小时前
ruoyi角色权限的对应关系
笔记
萧瑟余晖6 小时前
JDK 26 新特性详解
java·开发语言
马优晨7 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
a1117768 小时前
2FA 验证码生成器(github登录验证 app)
笔记·学习
我的xiaodoujiao8 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest
维天说9 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
破碎的南瓜9 小时前
sqli--sql注入过关笔记(1,2,3,4,5,9)
数据库·笔记·sql
Zane199410 小时前
并发 vs 并行:别再傻傻分不清了,一文讲透 Java 并发编程的第一课
java·后端