Collection集合

简介: Collection集合

.Collection集合

1.1数组和集合的区别【理解】

  • 相同点
    都是容器,可以存储多个数据
  • 不同点
  • 数组的长度是不可变的,集合的长度是可变的
  • 数组可以存基本数据类型和引用数据类型
    集合只能存引用数据类型,如果要存基本数据类型,需要存对应的包装类

1.2集合类体系结构【理解】

01_集合类体系结构图

1.3Collection 集合概述和使用【应用】

  • 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() 集合的长度,也就是集合中元素的个数

1.4Collection集合的遍历

1.4.1 迭代器遍历

  • 迭代器介绍
  • 迭代器,集合的专用遍历方式
  • Iterator<E> iterator(): 返回此集合中元素的迭代器,通过集合对象的iterator()方法得到
  • Iterator中的常用方法
    boolean hasNext(): 判断当前位置是否有元素可以被取出 E next(): 获取当前位置的元素,将迭代器对象移向下一个索引位置
  • Collection集合的遍历

public class IteratorDemo1 {

   public static void main(String[] args) {

       //创建集合对象

       Collection<String> c = new ArrayList<>();

       //添加元素

       c.add("hello");

       c.add("world");

       c.add("java");

       c.add("javaee");

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

       Iterator<String> it = c.iterator();

       //用while循环改进元素的判断和获取

       while (it.hasNext()) {

           String s = it.next();

           System.out.println(s);

       }

   }

}

  • 迭代器中删除的方法
    void remove(): 删除迭代器对象当前指向的元素

public class IteratorDemo2 {

   public static void main(String[] args) {

       ArrayList<String> list = new ArrayList<>();

       list.add("a");

       list.add("b");

       list.add("b");

       list.add("c");

       list.add("d");

       Iterator<String> it = list.iterator();

       while(it.hasNext()){

           String s = it.next();

           if("b".equals(s)){

               //指向谁,那么此时就删除谁.

               it.remove();

           }

       }

       System.out.println(list);

   }

}

1.4.2 增强for

  • 介绍
  • 它是JDK5之后出现的,其内部原理是一个Iterator迭代器
  • 实现Iterable接口的类才可以使用迭代器和增强for
  • 简化数组和Collection集合的遍历
  • 格式
    for(集合/数组中元素的数据类型 变量名 :  集合/数组名) {
    // 已经将当前遍历到的元素封装到变量中了,直接使用变量即可
    }
  • 代码

public class MyCollectonDemo1 {

   public static void main(String[] args) {

       ArrayList<String> list =  new ArrayList<>();

       list.add("a");

       list.add("b");

       list.add("c");

       list.add("d");

       list.add("e");

       list.add("f");

       //1,数据类型一定是集合或者数组中元素的类型

       //2,str仅仅是一个变量名而已,在循环的过程中,依次表示集合或者数组中的每一个元素

       //3,list就是要遍历的集合或者数组

       for(String str : list){

           System.out.println(str);

       }

   }

}

  • 细节点注意:

1.报错NoSuchElementException      

2.迭代器遍历完毕,指针不会复位        

3.循环中只能用一次next方法        

4.迭代器遍历时,不能用集合的方法进行增加或者删除

public class A04_CollectionDemo4 {

   public static void main(String[] args) {

     /*

       迭代器的细节注意点:

           1.报错NoSuchElementException

           2.迭代器遍历完毕,指针不会复位

           3.循环中只能用一次next方法

           4.迭代器遍历时,不能用集合的方法进行增加或者删除

               暂时当做一个结论先行记忆,在今天我们会讲解源码详细的再来分析。

               如果我实在要删除:那么可以用迭代器提供的remove方法进行删除。

               如果我要添加,暂时没有办法。(只是暂时)

      */

       //1.创建集合并添加元素

       Collection<String> coll = new ArrayList<>();

       coll.add("aaa");

       coll.add("bbb");

       coll.add("ccc");

       coll.add("ddd");

       //2.获取迭代器对象

       //迭代器就好比是一个箭头,默认指向集合的0索引处

       Iterator<String> it = coll.iterator();

       //3.利用循环不断的去获取集合中的每一个元素

       while(it.hasNext()){

           //4.next方法的两件事情:获取元素并移动指针

           String str = it.next();

           System.out.println(str);

       }

       //当上面循环结束之后,迭代器的指针已经指向了最后没有元素的位置

       //System.out.println(it.next());//NoSuchElementException

       //迭代器遍历完毕,指针不会复位

       System.out.println(it.hasNext());

       //如果我们要继续第二次遍历集合,只能再次获取一个新的迭代器对象

       Iterator<String> it2 = coll.iterator();

       while(it2.hasNext()){

           String str = it2.next();

           System.out.println(str);

       }

   }

}

1.4.3 lambda表达式

利用forEach方法,再结合lambda表达式的方式进行遍历

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

   }

}


相关文章
|
8月前
|
存储 人工智能 编解码
Deepseek 3FS解读与源码分析(2):网络通信模块分析
2025年2月28日,DeepSeek 正式开源其颠覆性文件系统Fire-Flyer 3FS(以下简称3FS),重新定义了分布式存储的性能边界。本文基于DeepSeek发表的技术报告与开源代码,深度解析 3FS 网络通信模块的核心设计及其对AI基础设施的革新意义。
Deepseek 3FS解读与源码分析(2):网络通信模块分析
|
12月前
|
测试技术 Python
Python中的异步编程与`asyncio`库
Python中的异步编程与`asyncio`库
|
10月前
|
机器学习/深度学习 PyTorch 调度
内部干货 | 基于华为昇腾910B算力卡的大模型部署和调优-课程讲义
近日上海,TsingtaoAI为某央企智算中心交付华为昇腾910B算力卡的大模型部署和调优课程。课程深入讲解如何在昇腾NPU上高效地训练、调优和部署PyTorch与Transformer模型,并结合实际应用场景,探索如何优化和迁移模型至昇腾NPU平台。课程涵盖从模型预训练、微调、推理与评估,到性能对比、算子适配、模型调优等一系列关键技术,帮助学员深入理解昇腾NPU的优势及其与主流深度学习框架(如PyTorch、Deepspeed、MindSpore)的结合应用。
3695 13
|
前端开发 Java 应用服务中间件
JVM进阶调优系列(1)类加载器原理一文讲透
本文详细介绍了JVM类加载机制。首先解释了类加载器的概念及其工作原理,接着阐述了四种类型的类加载器:启动类加载器、扩展类加载器、应用类加载器及用户自定义类加载器。文中重点讲解了双亲委派机制,包括其优点和缺点,并探讨了打破这一机制的方法。最后,通过Tomcat的实际应用示例,展示了如何通过自定义类加载器打破双亲委派机制,实现应用间的隔离。
Python语言如何使用MindOpt建模并求解混合整数线性规划问题
MindOpt是一款高效的优化算法软件包,求解算法实现了线性规划(LP)、混合整数线性规划(MILP)、二次规划(QP),可以支持命令行、c、c++、java和python调用。接下来我们将发布一系列文章,讲述各个语言如何使用 MindOpt 来求解数学规划问题。
Python语言如何使用MindOpt建模并求解混合整数线性规划问题
|
JavaScript UED
多个请求下 loading 的展示与关闭
多个请求下 loading 的展示与关闭
556 1
|
存储 JSON 自然语言处理
40-微服务技术栈(高级):分布式搜索引擎ElasticSearch(DSL语法、搜索结果[排序/分页/高亮]处理)
在前面的学习中,笔者带领大家完成海量数据导入ES,实现了ES基本的存储功能,但是我们知道ES最擅长的还是搜索、数据分析。所以本节笔者将继续带领大家研究一下ES的数据搜索功能,同上节一样,继续分别采用DSL和RestClient实现搜索。
415 0
|
Java 应用服务中间件 Linux
JDK和Tomcat部署时,版本不同的问题解决
JDK和Tomcat部署时,版本不同的问题解决
397 0
|
缓存 Java API
OpenglEs之EGL环境搭建
Opengl ES连载系列
506 0