文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

从零开始学习 Java:简单易懂的入门指南之Collection集合及list集合(二十一)

2023-09-06 11:21

关注

Collection集合及list集合

1.Collection集合

1.1数组和集合的区别

1.2集合类体系结构

在这里插入图片描述

1.3Collection 集合概述和使用

1.4Collection集合的遍历

1.4.1 迭代器遍历

1.4.2 增强for

报错NoSuchElementException

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

循环中只能用一次next方法

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

public class A04_CollectionDemo4 {    public static void main(String[] args) {              //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) {               //1.创建集合并添加元素        Collection<String> coll = new ArrayList<>();        coll.add("zhangsan");        coll.add("lisi");        coll.add("wangwu");        //2.利用匿名内部类的形式        //底层原理:        //其实也会自己遍历集合,依次得到每一个元素        //把得到的每一个元素,传递给下面的accept方法        //s依次表示集合中的每一个数据               //lambda表达式        coll.forEach(s -> System.out.println(s));    }}

2.List集合

2.1List集合的概述和特点

2.2List集合的特有方法

2.3List集合的五种遍历方式

  1. 迭代器
  2. 列表迭代器
  3. 增强for
  4. Lambda表达式
  5. 普通for循环

代码示例:

//创建集合并添加元素List<String> list = new ArrayList<>();list.add("aaa");list.add("bbb");list.add("ccc");//1.迭代器//2.增强for//下面的变量s,其实就是一个第三方的变量而已。//在循环的过程中,依次表示集合中的每一个元素//3.Lambda表达式//forEach方法的底层其实就是一个循环遍历,依次得到集合中的每一个元素//并把每一个元素传递给下面的accept方法//accept方法的形参s,依次表示集合中的每一个元素//list.forEach(s->System.out.println(s) );//4.普通for循环//size方法跟get方法还有循环结合的方式,利用索引获取到集合中的每一个元素// 5.列表迭代器//获取一个列表迭代器的对象,里面的指针默认也是指向0索引的//额外添加了一个方法:在遍历的过程中,可以添加元素ListIterator<String> it = list.listIterator();while(it.hasNext()){    String str = it.next();    if("bbb".equals(str)){        //qqq        it.add("qqq");    }}System.out.println(list);

2.4 细节点注意:

List系列集合中的两个删除的方法

1.直接删除元素2.通过索引进行删除

代码示例:

//List系列集合中的两个删除的方法//1.直接删除元素//2.通过索引进行删除//1.创建集合并添加元素List<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);//2.删除元素//请问:此时删除的是1这个元素,还是1索引上的元素?//为什么?//因为在调用方法的时候,如果方法出现了重载现象//优先调用,实参跟形参类型一致的那个方法。//list.remove(1);//手动装箱,手动把基本数据类型的1,变成Integer类型Integer i = Integer.valueOf(1);list.remove(i);System.out.println(list);

3.数据结构

3.1数据结构之栈和队列

3.2数据结构之数组和链表

4.List集合的实现类

4.1List集合子类的特点

4.2LinkedList集合的特有功能

5. 源码分析

5.1 ArrayList源码分析:

核心步骤:

  1. 创建ArrayList对象的时候,他在底层先创建了一个长度为10的数组。

    数组名字:elementDate,定义变量size。

    size这个变量有两层含义:
    ①:元素的个数,也就是集合的长度
    ②:下一个元素的存入位置

  2. 添加元素,添加完毕后,size++

扩容时机一:

  1. 当存满时候,会创建一个新的数组,新数组的长度,是原来的1.5倍,也就是长度为15.再把所有的元素,全拷贝到新数组中。如果继续添加数据,这个长度为15的数组也满了,那么下次还会继续扩容,还是1.5倍。

扩容时机二:

  1. 一次性添加多个数据,扩容1.5倍不够,怎么办呀?

    如果一次添加多个元素,1.5倍放不下,那么新创建数组的长度以实际为准。

举个例子:
在一开始,如果默认的长度为10的数组已经装满了,在装满的情况下,我一次性要添加100个数据很显然,10扩容1.5倍,变成15,还是不够,

怎么办?

此时新数组的长度,就以实际情况为准,就是110

具体分析过程可以参见视频讲解。

添加一个元素时的扩容:

在这里插入图片描述

添加多个元素时的扩容:

在这里插入图片描述

5.2 LinkedList源码分析:

底层是双向链表结构

核心步骤如下:

  1. 刚开始创建的时候,底层创建了两个变量:一个记录头结点first,一个记录尾结点last,默认为null
  2. 添加第一个元素时,底层创建一个结点对象,first和last都记录这个结点的地址值
  3. 添加第二个元素时,底层创建一个结点对象,第一个结点会记录第二个结点的地址值,last会记录新结点的地址值

具体分析过程可以参见视频讲解。

在这里插入图片描述

5.3 迭代器源码分析:

迭代器遍历相关的三个方法:

在这里插入图片描述

后记
👉👉💕💕美好的一天,到此结束,下次继续努力!欲知后续,请看下回分解,写作不易,感谢大家的支持!! 🌹🌹🌹

来源地址:https://blog.csdn.net/m0_59230408/article/details/132109562

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯