欢迎光临
我们一直在努力

Java 集合|Collection、List、ArrayList、LinkedList、泛型、Collections 工具类

一、集合概念

  • 集合是容器工具,用于存储数量不等的多个对象。
  • 集合相关接口、类全部位于 java.util 包下。
  • 学习集合四个核心角度:
  • 集合接口的特点
  • 集合接口的功能方法
  • 集合接口对应的实现类
  • 集合的遍历方式
  • 二、Collection 集合体系

    2.1 Collection 父接口

    • 特点:可以存储任意Object类型对象。
    • 常用方法:

    表格

    方法说明
    boolean add(Object o) 向集合添加对象
    boolean contains(Object o) 判断集合是否包含该元素,返回 true/false
    boolean remove(Object o) 移除集合中的指定对象
    int size() 获取集合有效元素个数

    Collection 没有直接实现类,功能由子接口实现。

    2.2 List 子接口

    • 特点:存储 Object 对象,有序、带下标、允许元素重复
    • 下标范围:0 ~ size()-1

    List 继承 Collection 全部方法,额外扩展方法:

    表格

    方法说明
    add(int index,Object o) 在指定下标位置插入元素
    Object get(int index) 根据下标获取元素
    Object remove(int index) 根据下标删除元素,返回被删除对象
    Object set(int index,Object o) 修改指定下标元素,返回修改前旧元素
    List subList(int fromIndex,int toIndex) 截取集合,左包含、右不包含 [fromIndex, toIndex‑1]

    2.3 List 实现类

    1. ArrayList
    • 底层:数组实现
    • JDK7:创建对象不会初始化底层数组;第一次执行add()才初始化数组,初始容量默认10;扩容按照1.5 倍扩容。
    • 特性:查询效率高;中间插入、删除元素效率低;线程不安全,执行效率高。
    • 适用场景:大量做末尾添加、查询操作。
    2. Vector
    • 底层:数组实现
    • JDK1.0;线程安全,效率较低;查询快,中间增删慢。
    3. LinkedList
    • 底层:双向链表实现
    • 查询遍历效率低;中间位置增删元素效率高;线程不安全,效率高。

    ✨面试题:ArrayList 和 LinkedList 的区别

  • ArrayList 底层数组;查询快,中间插入删除慢;1.5 倍扩容;线程不安全。
  • LinkedList 底层双向链表;查询慢;中间增删效率高;没有扩容机制;线程不安全。
  • 2.4 List 集合三种遍历方式

    ① 下标 for 遍历

    for(int i = 0 ; i < list.size() ; i++){
    Object obj = list.get(i);
    }

    ② for‑each 增强 for 循环(开发常用)

    for‑each 底层本质是迭代器

    for(Object obj : list){
    //操作obj
    }

    ③ Iterator 迭代器遍历

    //获取迭代器对象
    Iterator<String> it = list.iterator();
    while(it.hasNext()){
    //hasNext() 判断游标右侧是否还有元素
    String str = it.next();
    //next()取出下一个元素,无元素会抛出 NoSuchElementException
    System.out.println(str);
    }

    注意:迭代器游标初始位于所有元素最左侧;调用next()之前必须先用hasNext()判断。

    2.5 泛型

    1)泛型集合

    作用:约束集合存储类型,保证数据类型安全,集合元素类型统一。

    //完整写法
    List<String> list = new ArrayList<String>();
    //JDK7之后菱形语法简写
    List<String> list = new ArrayList<>();

    泛型只能写引用类型;如果需要基本类型,使用对应的包装类。不指定泛型,默认泛型为Object。

    2)自定义泛型类

    泛型标识一般使用单个大写字母:T、K、V、E

    //定义泛型类
    class Demo<T>{
    //T就当作一种数据类型使用
    private T data;
    }

    //创建对象时指定泛型真实类型
    Demo<String> demo = new Demo<>();

    • JDK5 之后泛型也可以定义在接口上。
    • 使用泛型让代码更加通用灵活,多用于通用工具类、底层框架开发。

    2.6 Collections 工具类

    java.util.Collections,集合工具类,全部为静态方法,直接类名调用。

    表格

    静态方法说明
    Collections.reverse(List list) 集合元素反转
    Collections.shuffle(List list) 集合元素随机打乱
    Collections.sort(List list) 集合排序

    排序注意点:

  • 如果集合存放自定义对象,实体类需要实现Comparable接口,重写compareTo()方法定义排序规则 —— 内置比较器。
  • List 自带sort(Comparator c)方法,可以传入Comparator接口(匿名内部类 / Lambda)实现排序 —— 外置比较器。
  • ✨面试题:集合实现排序

  • 使用Collections.sort(list);
  • 集合存放自定义实体类:
    • 方式一:实体实现Comparable重写compareTo内置比较器;
    • 方式二:调用 list.sort (Comparator) 传入外置比较器(匿名内部类 / Lambda)。
  • 赞(0)
    未经允许不得转载:171主机测评 » Java 集合|Collection、List、ArrayList、LinkedList、泛型、Collections 工具类
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址