Collection集合

简介: Collection集合

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

   }

}


相关文章
|
存储 缓存 算法
数据库必知词汇:布隆过滤器(Bloom Filter)
布隆过滤器(Bloom Filter)是由Burton Bloom 在1970年提出的,其后在P2P上得到了广泛的应用。一个空的布隆过滤器是一个m位的位数组,所有位的值都为0。定义了k个不同的符合均匀随机分布的哈希函数,每个函数把集合元素映射到位数组的m位中的某一位。Bloom filter算法可用来查询某一数据是否在某一数据集合中。其优点是查询效率高、可节省空间。但其缺点是会存在一定的错误。因此Bloom filter 算法仅仅能应用于那些同意有一定错误的场合。可使用Bloom filter 算法的场合包含字典软件、分布式缓存、P2P网络和资源路由等等。
1807 0
|
7月前
|
Rust 中间件 API
BustAPI:当 Python 遇上 Rust,Web 框架也能“起飞“
BustAPI 是融合 Python 易用性与 Rust 高性能的 Web 框架:基于 PyO3 封装 Actix-Web,保留 Flask 风格语法,请求性能提升 10–50 倍;支持自动文档、类型校验、异步、中间件等生产级功能,迁移零成本,部署极简——让 Python 服务轻松应对高并发。
659 5
|
5月前
|
SQL 存储 缓存
【Java基础】核心关键字:final、static、volatile、synchronized、transient(附《思维导图》+《面试高频考点清单》)
本文系统解析Java五大核心关键字:final(不可变性)、static(类级共享)、volatile(轻量级可见性)、synchronized(重量级同步)与transient(序列化控制)。涵盖语义、使用场景、底层原理(内存屏障、Monitor、类加载机制等)、常见误区及高频面试要点。
【Java基础】核心关键字:final、static、volatile、synchronized、transient(附《思维导图》+《面试高频考点清单》)
|
Web App开发 JavaScript
学习VUE之正则表达式全集整理
学习VUE之正则表达式全集整理
447 0
|
编解码 物联网 开发者
FLUX.1 Kontext 的全生态教程来啦!AIGC专区在线试玩!
Flux.1 Kontext [dev] 开源模型大家都用上了吗?小编汇总了3个使用教程,打包送上!
4044 1
|
弹性计算 容灾 对象存储
阿里云2核4G5M服务器一年和五年价格表_轻量和ECS租用费用
2023阿里云2核4G5M服务器一年和五年价格表_轻量和ECS租用费用
840 0
阿里云2核4G5M服务器一年和五年价格表_轻量和ECS租用费用
独家直播|DB-GPT架构设计与源码解读(第一期)
🚀 DB-GPT首期源码解读系列上线啦! 10.8 晚7点,与DB-GPT项目发起人陈发强一起,深入探索DB-GPT的架构设计与源码解读。 🔎 直播看点: ● 架构全剖析:从设计思考到架构逻辑,全面剖析DB-GPT。 ● 源码速度解读:多模型管理、智能体、RAG、AWEL等核心模块一网打尽。 ● 项目作者面对面:陈发强,蚂蚁集团DB-GPT开源项目发起人,分享实战经验与洞见。 ● 有问必答:围绕DB-GPT的使用问题有问必答,线上帮你解issue! 👉 立即扫码预约,与DB-GPT作者零距离交流!
|
JavaScript 前端开发 安全
JS 混淆解析:JS 压缩混淆原理、OB 混淆特性、OB 混淆JS、混淆突破实战
JS 混淆解析:JS 压缩混淆原理、OB 混淆特性、OB 混淆JS、混淆突破实战
2296 2
|
存储 前端开发 数据库
Session、Cookie和Token的主要区别
Session、Cookie和Token的主要区别
620 1