Java中的Collection

Collection

Collection 集合概述和使用

  • Collection集合概述

    • 是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素

    • JDK 不提供此接口的任何直接实现.它提供更具体的子接口(如Set和List)实现

  • 创建Collection集合的对象

    • 多态的方式

    • 具体的实现类ArrayList

  • Collection集合常用方法

    方法名 说明
    boolean add(E e) 添加元素
    boolean remove(Object o) 从集合中移除指定的元素
    boolean removeIf(Object o) 根据条件进行移除
    void clear() 清空集合中的元素
    boolean contains(Object o) 判断集合中是否存在指定的元素
    boolean isEmpty() 判断集合是否为空
    int size() 集合的长度,也就是集合中元素的个数

collection集合体系图

各类使用场景

collection三种通用的遍历方式

1. 迭代器(不依赖索引)

介绍
  • 迭代器,集合的专用遍历方式

  • Iterator<E> iterator(): 返回此集合中元素的迭代器,通过集合对象的iterator()方法得到

三个主要的方法:
  • boolean hasNext(): 检查是否还有下一个元素。

  • Object next(): 返回下一个元素。

  • void remove(): 删除迭代器最后一次返回的元素。

使用迭代器遍历集合的基本步骤如下:
  1. 获取集合的迭代器对象。

  2. 使用hasNext()方法检查是否还有下一个元素。

  3. 使用next()方法获取下一个元素。

  4. 重复步骤2和3,直到没有更多元素。

下面是一个使用迭代器遍历ArrayList的简单示例:
复制代码
 
java 复制代码
import java.util.ArrayList;
 import java.util.Iterator;
 ​
 public class IteratorExample {
     public static void main(String[] args) {
         // 创建一个ArrayList对象
         ArrayList<String> list = new ArrayList<>();
         list.add("元素1");
         list.add("元素2");
         list.add("元素3");
 ​
         // 获取迭代器
         Iterator<String> iterator = list.iterator();
 ​
         // 使用迭代器遍历ArrayList
         while (iterator.hasNext()) {
             String element = iterator.next();
             System.out.println(element);
         }
 ​
         // 尝试删除元素(可选)
         if (iterator.hasNext()) {
             iterator.next();
             iterator.remove(); // 删除最后一个访问的元素
         }
 ​
         // 再次遍历ArrayList,观察删除效果
         System.out.println("删除元素后:");
         iterator = list.iterator();
         while (iterator.hasNext()) {
             String element = iterator.next();
             System.out.println(element);
         }
     }
 }
注意事项:
  • 迭代器遍历完毕,指针不会复位。

  • 循环中只能用一次next方法,因为用两次next方法可能回导致指针越界。

  • next和hasnext方法要配套使用。

  • 迭代器遍历时,不能用集合调用remove方式进行删除,要调用iterator中的方式进行删除。

增强for循环

介绍
  • 它是JDK5之后出现的,其内部原理是一个Iterator迭代器

  • 实现Iterable接口的类才可以使用迭代器和增强for

  • 简化数组和Collection集合的遍历

基本语法如下:
java 复制代码
 for (元素类型 元素变量 : 集合或数组) {    // 循环体}

例如,遍历一个ArrayList:

java 复制代码
 aList<String> list = new ArrayList<>();
 list.add("Apple");list.add("Banana");list.add("Cherry");
 for (String fruit : list) {
     System.out.println(fruit);
 }
注意事项
  1. 增强for循环只能用于遍历,不能用于添加或删除元素。在循环体内对集合进行修改(如add或remove)可能会引发ConcurrentModificationException异常。

  2. 对于基本数据类型,如int、double等,需要在前面声明一个对应的包装类型变量,如Integer、Double等。

Lambda表达式

Lambda表达式是Java 8引入的一种新特性,主要用于表示匿名函数。在遍历集合时,常与Stream API结合使用。基本语法如下:

java 复制代码
 集合.stream().forEach(元素 -> {    // 对元素进行操作});

例如,遍历一个ArrayList并打印每个元素:

java 复制代码
public class A07_CollectionDemo7 {
     public static void main(String[] args) {
        /* 
         lambda表达式遍历:
                 default void forEach(Consumer<? super T> action):
         */
 ​
         //1.创建集合并添加元素
         Collection<String> coll = new ArrayList<>();
         coll.add("zhangsan");
         coll.add("lisi");
         coll.add("wangwu");
         //2.利用匿名内部类的形式
         //底层原理:
         //其实也会自己遍历集合,依次得到每一个元素
         //把得到的每一个元素,传递给下面的accept方法
         //s依次表示集合中的每一个数据
        /* coll.forEach(new Consumer<String>() {
             @Override
             public void accept(String s) {
                 System.out.println(s);
             }
         });*/
 ​
         //lambda表达式
         coll.forEach(s -> System.out.println(s));
     }
 }
注意事项
  1. Lambda表达式主要用于函数式编程,适用于对集合进行复杂操作,如过滤、映射、排序等。对于简单的遍历操作,增强for循环可能更加直观和高效。

  2. Lambda表达式在遍历过程中同样不能修改集合,否则会引发异常。

  3. Lambda表达式中的->操作符左侧是参数列表,右侧是Lambda体。如果Lambda体只有一条语句,可以省略大括号和分号。

  4. Lambda表达式可以引用外部变量,但这些变量必须是final或等效于final的(即未被修改过)。

相关推荐
java1234_小锋5 小时前
Java高频面试题:Spring-AOP通知和执行顺序?
java·开发语言·spring
番茄去哪了5 小时前
Java基础面试题day02
java·开发语言·面向对象编程
xushichao19895 小时前
C++中的工厂模式高级应用
开发语言·c++·算法
njsgcs5 小时前
c# solidworks 折弯系数检查
开发语言·c#
SuperEugene5 小时前
Vue3 + Element Plus 表格实战:批量操作、行内编辑、跨页选中逻辑统一|表单与表格规范篇
开发语言·前端·javascript
2501_924952695 小时前
C++模块化编程指南
开发语言·c++·算法
2401_831920745 小时前
基于C++的爬虫框架
开发语言·c++·算法
我是咸鱼不闲呀5 小时前
力扣Hot100系列22(Java)——[图论]总结(岛屿数量,腐烂的橘子,课程表,实现Trie(前缀树))
java·leetcode·图论
1104.北光c°5 小时前
深入浅出 Elasticsearch:从搜索框到精准排序的架构实战
java·开发语言·elasticsearch·缓存·架构·全文检索·es
MSTcheng.5 小时前
【优选算法必修篇——位运算】『面试题 01.01. 判定字符是否唯一&面试题 17.19. 消失的两个数字』
java·算法·面试