首页 > 其他分享 >m1_day14

m1_day14

时间:2024-05-10 23:30:28浏览次数:25  
标签:下标 删除 ArrayList 元素 list day14 m1 集合

课程内容
  • ArrayList集合


                                                        JCF

Collection Map
[单值类型的集合] [键值对类型的集合]

List Set SortedMap
有序 无序
不唯一 唯一
SortedSet
有序
唯一
ArrayList0:包装类
  • ArrayList底层基于Object[]实现的 所以只能存储引用数据类型 如果想要装基本数据类型 需要将基本数据类型转换成包装类 -》 集合

  • 包装类里面提供一个方法[parseXXX] 可以将字符串转换成对应的基本数据类型

ArrayList1:基本用法及特点
创建ArrayList对象:
ArrayList list = new ArrayList();//5.0之前 默认往集合里面装Object
ArrayList<泛型> list = new ArrayList<泛型>();//5.0开始加泛型
ArrayList<泛型> list = new ArrayList<>();//7.0泛型自动推断

如何添加元素:
list.add(元素);//元素添加进列表的尾部
list.add(下标,元素);//元素插入到列表的指定位置
Collections.addAll(集合,元素,元素...);//一次添加多个元素
Collections和Collection之间的区别?
Collection是所有单值集合统一的父接口:interface
Collections是集合的工具类:class

如何得到元素/修改元素
E xx = list.get(下标);
list.set(下标,元素);

如何判断是否包含/集合是否为空?
boolean x = list.contains(E e);       数组没有contains()
boolean y = list.isEmpty();

如何得到元素的第一次出现的下标/最后一次出现的下标
int x = list.indexOf(E e); 数组没有indexOf()
int y = list.lastIndexOf(E e);   数组没有lastIndexOf()

得到集合大小:
list.size()

将集合里面的元素装进数组里面:
Object[] data = list.toArray();
XXX[] data = list.toArray(new XXX[0]);

如何遍历集合对象:
for + 下标
foreach
迭代器
ArrayList2:如何删除
ArrayList类里面删除元素:
list.remove(int 下标):指定下标删除   [原理:数组的后元素往前面移动]
list.remove(Object 元素):指定元素删除 [原理:
拿着被删除的元素.equals(集合元素)]
清空集合:list.clear()
================================================================
list.contains(Object 元素):包含元素 [原理:
被包含的元素.equals(集合元素)]
list.indexOf(Object 元素):找元素下标 [原理:
被查找的元素.equals(集合元素)]
lastIndexOf()和indexOf()同理
ArrayList3:如何在遍历集合的同时进行删除
for + 下标 -》 删除一个跑掉一个 除非到这删除 但是Set集合用不了
forEach -> foreach遍历的时候进行删除 会触发CME异常
迭代器 -》 使用迭代器遍历集合的时候 不允许对集合的整体进行添加/删除操作
否则触发CME异常 如果在遍历的时候想要进行删除 使用car.remove()

CME【快速失败】的原理?
每一个集合底层都有一个变量叫modCount 记录对集合的处理次数[添加/删除/修改底层数组空间大小] 每次处理 modCount++
在执行list.iterator()的时候 迭代器会将集合自己的modCount的值拷贝到迭代器自己的属性[expectedModCount]里面
当执行car.next()触发modCount和expectedModCount值的比较 一旦两个值不一样触发CME异常
ArrayList4:ArrayList构造方法
构造方法:
ArrayList list = new ArrayList();//[]:默认10块空间
ArrayList list = new ArrayList(int x);//[]:开辟x块空间
ArrayList list = new ArrayList(Collection 单值集合);//将参数集合里面的元素装进list集合里面

集合无论底层开辟多大空间 都可以存储无数个元素 集合会自动扩容
jdk6.0及之前 x * 3 / 2 + 1
jdk7.0及之后 x + (x >> 1)

在项目开发的时候尽量避免扩容:
1:创建一个新的数组对象
2:将老数组里面的元素复制到新数组里面
3:改变引用指向
4:回收老数组对象
5:添加元素

扩容:list.ensureCapacity(int 容量)
缩容:list.trimToSize()

List接口:

  • ArrayList

  • Vector语法和ArrayList一模一样

  • LinkedList语法和ArrayList一模一样

  • Stack:用数组模拟栈结构

面试题:
  • ArrayList和Vector之间的区别?

    同步线程不同
    Vector同一时间允许一个线程进行访问 效率较低 但是不会出现并发错误
    ArrayList同一时间允许多个线程进行访问 效率较高但是可能会出现并发错误
    jdk5.0开始 集合的工具类里面提供一个方法 可以将线程不安全的ArrayList   变成线程安全的List集合 于是Vector渐渐被淘汰
    List list = Collections.synchronizedList(ArrayList对象);

    扩容机制不同:
    Vector:分构造方法
    Vector(8) -> 2倍扩容 -> 8 -> 16 -> 32....
    Vector(8,3) -> 定长扩容 -> 8 -> 11 -> 14 -> 17...

    ArrayList分版本:
    jdk6.0及之前 x * 3 / 2 + 1
    jdk7.0及之后 x + (x >> 1)

    出现的版本不同:
    Vector:since jdk1.0  
    ArrayList since jdk1.2
  • ArrayList和LinkedList之间的区别?

    ArrayList和LinkedList底层数据结构不同 导致他们的优劣势不同
    ArrayList底层基于数组实现的
    优势:查找 随机访问效率高
    劣势:插入元素 / 删除元素效率低
    LinkedList底层基于双向循环链表
    优势:插入/添加/删除元素效率高
    劣势:查找效率极低
      在开发的时候 尽量避免使用LinkedList的get(下标)

标签:下标,删除,ArrayList,元素,list,day14,m1,集合
From: https://www.cnblogs.com/zhaodenghui33/p/18185494

相关文章

  • m1_day1
    课程内容:Java的优势Java的优势:跨平台*什么是平台平台指的是操作系统常见的操作系统:WindowsUnixLinuxSolaris[Sun]什么是跨平台用Java开发出来的应用程序不受底层操作系统的限制可以运行在所有的操作系统上面这是早期程序员的共同目标底层的功臣:JVM=j......
  • m1_day3
    课程内容:Java中的数据类型Java中的运算符Java中的数据类型什么是数据类型数据类型可以理解成数据的单位Java是一个强类型的编程语言所有的变量在第一次出现的时候必须有数据类型第二次出现不需要数据类型​钱:元角 分百美元日元个数:个只条栋....长......
  • m1_day4
    课程内容:Java中的运算符Java中的变量Java中的运算符:高-》低[+-*/%]+:当+遇到String类型的时候不再表示算数加法而是表示追加连接任何一个数据类型想要变成String+""intx=45;Stringy=x+"";*:当心数值超出int类型最大边界注意使用lon......
  • Multisim14--软件简介及安装教程(内含安装包)
    安装包见文章末尾 一、软件简介Multisim是美国国家仪器(NI)有限公司推出的以Windows为基础的仿真工具,适用于板级的模拟/数字电路板的设计工作。它包含了电路原理图的图形输入、电路硬件描述语言输入方式,具有丰富的仿真分析能力。工程师们可以使用Multisim交互式地搭建电路原......
  • cf gym101981e Eva and Euro coins
     20182019-acmicpc-asia-nanjing-regional-contest-en.pdf(codeforces.com) 这类字符串的能否从s状态到达t状态的题。还可以删除若干子串后然后比较。感觉是一种套路。 100↔111↔001011↔000↔110 01001↔10010可以移动 用栈,如果找到k个连续相同,然后栈删掉这k......
  • Mac(M1)配置基于ARM64的Tensorflow
    以下步骤最好先执行condaconfig--remove-keychannels 删除conda镜像源pipconfigunsetglobal.index-url 删除pip镜像源然后接下来的步骤最好挂上梯子。1.下载miniforge:从https://github.com/conda-forge/miniforge上找到arm64(AppleSilicon)版本进行下载,下一步下一步的......
  • 持续性学习-Day14(前端基础HTML5)
    参考教学视频:秦疆 HTML(HyperTexctMarkupLanguage)超文本标记语言W3C:WorldWideWebConsortium万维网联盟W3C标准包括:结构化标准语言(HTML、XML)表现标准语言(CSS)行为标准(DOM、EXMAScript)1.基本标签<!--标题标签--><!--h1-h5--><!--段落标签--><p></p><!--......
  • day14_我的Java学习笔记 (常用API、Lambda、常见算法)
    1.常用API1.1Date类【案例】:计算出当前时间往后走1小时121秒之后的时间是多少。1.2SimpleDateFormat【练习】:秒杀活动1.3Calendar2.JDK8新增日期类2.1概述、LocalTime/LocalDate/LocalDateTime2.2Ins......
  • 笔记:J1939协议之DM1
    目标:学习SAE1939-73中的DM1,尤其是多包故障的传输规则一、基本概念SAE1939-73即CAN总线J1939协议的应用层-诊断符号缩写的含义DM1诊断信息1,当前故障码DM2诊断信息2,历史故障码DM3诊断信息3,历史故障码的清除/复位DM4诊断信息4,停帧参量DM5诊断信息5,诊断准备就绪DM6诊断信......
  • BM1 反转链表
    开始刷数据结构了。1.递归importjava.util.*;/**publicclassListNode{*intval;*ListNodenext=null;*publicListNode(intval){*this.val=val;*}*}*/publicclassSolution{publicListNodeReverseList(ListNodehea......