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

   }

}


相关文章
|
算法
MATlAB运用——数值积分
MATlAB运用——数值积分
319 0
|
10月前
|
自然语言处理 搜索推荐 数据挖掘
淘宝商品描述 API 接口的开发、应用与收益
淘宝商品描述API接口的开发与应用涵盖注册成为开发者、了解API规范、选择开发工具及语言(如Python)和实现代码调用。该接口可用于优化电商平台商品展示、同步数据、竞品分析、智能客服及个性化推荐,从而提高销售转化率、降低运营成本并拓展业务机会。通过自动化处理和数据分析,企业能更精准地满足消费者需求,提升竞争力。
225 9
|
NoSQL Java API
lua+redis:分布式锁解决方案
分布式锁的是确保在多个进程或多个节点之间对共享资源的访问是有序、互斥和原子的,以避免竞态条件和数据不一致性问题。在多进程或多节点环境中,分布式锁广泛应用于协调共享资源的安全访问。
341 1
双非本科进不了大厂?阿里技术四面+交叉面+HR面,成功拿到offer
前两天,我收到了阿里巴巴的实习offer,从学长内推开始面试到拿到最后offer经历了4面技术、一面交叉面和一面HR面。经过了漫长的等待和几次几乎折磨的面试之后,终于拿到了实习offer。
|
JavaScript
【vue】vue 在线编辑、实时预览的代码交互组件 vue-code-view
【vue】vue 在线编辑、实时预览的代码交互组件 vue-code-view
1838 0
|
人工智能 前端开发 Linux
Python编程:利用ImageMagick转换PDF为图片并识别提取图表
Python编程:利用ImageMagick转换PDF为图片并识别提取图表
481 0
|
缓存 并行计算 Ubuntu
科研GPU环境配置-快让师兄弟们优雅地享受共享环境吧!
以下列举我对实验室4090的操作,目的是为了让实验室所有人都有隔离的沙盒环境,节省硬盘以及更方便 一听说老师买了24G 4090,真的超级兴奋!!!
472 0
科研GPU环境配置-快让师兄弟们优雅地享受共享环境吧!
|
机器学习/深度学习 存储 PyTorch
还没了解MIGraphX推理框架?试试这篇让你快速入门
MIGraphX是一款用于DCU上的深度学习推理引擎,它的目的是为了简化和优化端到端的模型部署流程,包括模型优化、代码生成和推理。MIGraphX能够处理多种来源的模型,如TensorFlow和Pytorch,并提供用户友好的编程界面和工具,使得用户可以集中精力在业务推理开发上,而不需要深入了解底层硬件细节。
541 0
|
消息中间件 存储 缓存
深度解读 RocketMQ 存储机制
本文想从一个不一样的视角,着重于谈谈我眼中的这种存储实现是在解决哪些复杂的问题,因此我从本文最初的版本中删去了冗杂的代码细节分析,由浅入深的分析存储机制的缺陷与优化方向。
872 1
深度解读 RocketMQ  存储机制
|
消息中间件 uml RocketMQ
3 张图带你彻底理解 RocketMQ 事务消息
3 张图带你彻底理解 RocketMQ 事务消息
68029 2
3 张图带你彻底理解 RocketMQ 事务消息