下标越界

深入理解ArrayList

只谈情不闲聊 提交于 2019-12-14 07:13:58
什么是ArrayList? ArrayList的实现原理其实就是数组(动态数组),ArrayList的介绍及简单使用方法 动态数组与一般数组有什么区别? 与Java中的数组相比,ArrayList的容量能动态地增长 ArrayList效率怎么样? ArrayList不是线程安全的,所以效率比较高 ,但是只能用于单线程的环境中,那多线程呢?别急,文末会讲到 ArrayList主要继承哪些类实现了哪些接口? ArrayList主要继承了AbstractList类,实现了List、RandomAccess、Cloneable、Serializable接口 public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable RandomAccess的意思是其拥有快速访问的能力,ArrayList可以以 O(1)[^1]的时间复杂度去根据下标访问元素。由于ArrayList底层结构是数组,所以它占据了一块连续的内存空间,其长度就是数组的大小,因此它也有数组的缺点,在空间效率不高,但是也有它的优点,就是查询速度快,时间效率较快 ArrayList的常量与变量有哪些? // 序列ID private static final long

好程序员大数据教程分享实用的大数据之数组

别等时光非礼了梦想. 提交于 2019-12-11 15:28:48
好程序员大数据教程分享实用的大数据之数组 1.5.1 数组的定义与元素访问 数组是一个容器, 是一个用来存储指定数据类型的容器 注意事项: 数组是一个定长的容器, 一旦实例化完成, 长度不能修改 名词解释: 数组长度: 指的就是这个容器的容量, 表示这个数组中能存储多少个数据 元素: 指的就是数组中存储的数据 下标: 某一个元素在数组中的一个位置索引 遍历数组: 依次获取到数组中的每一个元素 数组的元素访问 通过下标来访问的, 数组中元素的下标是从0开始的 数组中元素的下标: [0, 数组.length - 1] 注意: 在访问数组中元素的时候, 注意下标的范围, 不要越界!!! 遍历数组: 使用循环遍历下标的方式 int[] array = {1, 2, 3}; for (int index = 0; index < array.length; index++) { System.out.println(array[index]); } 使用增强for循环 int[] array = {1, 2, 3}; for (int ele : array) { System.out.println(ele); } 1.5.2 数组的内存分析 1.5.3 数组的常见操作 1.5.4 数组排序 选择排序 固定一个下标, 然后用这个下标对应的元素依次和后面每一个下标的元素进行比较 int[]

好程序员大数据教程分享实用的大数据之数组

匆匆过客 提交于 2019-12-09 18:11:20
好程序员大数据教程分享实用的大数据之数组 1.5.1 数组的定义与元素访问 数组是一个容器, 是一个用来存储指定数据类型的容器 注意事项: 数组是一个定长的容器, 一旦实例化完成, 长度不能修改 名词解释: 数组长度: 指的就是这个容器的容量, 表示这个数组中能存储多少个数据 元素: 指的就是数组中存储的数据 下标: 某一个元素在数组中的一个位置索引 遍历数组: 依次获取到数组中的每一个元素 数组的元素访问 通过下标来访问的, 数组中元素的下标是从0开始的 数组中元素的下标: [0, 数组.length - 1] 注意: 在访问数组中元素的时候, 注意下标的范围, 不要越界!!! 遍历数组: 使用循环遍历下标的方式 int [ ] array = { 1 , 2 , 3 } ; for ( int index = 0 ; index < array . length ; index ++ ) { System . out . println ( array [ index ] ) ; } 使用增强for循环 int [ ] array = { 1 , 2 , 3 } ; for ( int ele : array ) { System . out . println ( ele ) ; } 1.5.2 数组的内存分析 1.5.3 数组的常见操作 1.5.4 数组排序 选择排序

好程序员大数据教程分享实用的大数据之数组

狂风中的少年 提交于 2019-12-09 17:36:38
好程序员大数据教程分享实用的大数据之数组 #### 1.5.1 数组的定义与元素访问 > 数组是一个容器, 是一个用来存储指定数据类型的容器 注意事项: 1. 数组是一个定长的容器, 一旦实例化完成, 长度不能修改 名词解释: 1. 数组长度: 指的就是这个容器的容量, 表示这个数组中能存储多少个数据 2. 元素: 指的就是数组中存储的数据 3. 下标: 某一个元素在数组中的一个位置索引 4. 遍历数组: 依次获取到数组中的每一个元素 **数组的元素访问** 通过下标来访问的, 数组中元素的下标是从0开始的 数组中元素的下标: [0, 数组.length - 1] **注意:** 在访问数组中元素的时候, 注意下标的范围, 不要越界!!! 遍历数组: 1. 使用循环遍历下标的方式 ```java int[] array = {1, 2, 3}; for (int index = 0; index < array.length; index++) { System.out.println(array[index]); } ``` 2. 使用增强for循环 ```java int[] array = {1, 2, 3}; for (int ele : array) { System.out.println(ele); } ``` #### 1.5.2 数组的内存分析 #### 1.5

布尔&list与条件循环语句与trutle

て烟熏妆下的殇ゞ 提交于 2019-12-07 11:44:29
布尔值与空值 布尔值: 一个布尔值只有True、False两种值 空值: 是python里一个特殊的值,用None表示。None不能理解为0。因为0是有意义的,而None是一个特殊值。 list(列表) 本质:一种有序的集合 创建列表 格式: 列表名= [列表选项1,列表选项2,列表选项3.....列表选项n] 创建了一个空列表 list1 = [] 创建带有元素的列表 list2 = [18,19,20,21,22, "shaoge" , "good" , True] 列表中的元素数据可以是不同类型的 列表元素的访问 注意不要越界(下标超出了可表示的范围) 取值 格式 列表名[下标] 下标从0开始 替换 list2[2] = 300 将19替换成了300 列表操作 列表组合 list5 = [1,2,3] list6 = [4,5,6] list7 = list5+list6 列表的重复 list8 = [1,2,3] print(list8*3) 判断元素是否在列表中 print(3 in list5) 列表截取 list10 = [1,2,3,4,5,6,7,8,9] print(list10[3:10]) 拿出下标 3 到10的元素数据 二维列表 list11 = [ [1,2,3],[4,5,6],[7,8,9] ] 取值 list11[1] [1] 值为5

在数组使用过程中经常遇到的两种异常

邮差的信 提交于 2019-12-06 12:22:05
1、数组下标越界异常:ArrayIndexOutOfBoundsException 一维数组的下标范围:[0,数组名.length-1] 二维数组的行下标范围:[0,数组名.length-1] 二维数组的列下标范围:[0,数组名[行下标].length-1] 2、空指针异常:NullPointerExeption 元素是引用数据类型: 例如:String[],Student[]… 这种数组的元素的默认值是null,在给元素赋值之前,使用数组的元素进行.操作就会报空指针异常 1 String[] names = new String[3]; 2 System.out.println(names[0].charAt(0));//names[0]是null 使用二维数组时,如果没有为行指定列数,那么此时行是null 1 int[][] arr = new int[3][]; 2 3 System.out.println(arr[0].length);//arr[0]是null 4 System.out.println(arr[0][0]);//arr[0]是null 来源: https://www.cnblogs.com/daidai66/p/11983345.html

jvm指令

≯℡__Kan透↙ 提交于 2019-12-06 11:50:57
1.反编译指令: javap -c xxx.class 2.jvm指令集: 指令码 助记符 功能描述 0x00 nop 无操作 0x01 aconst_null 指令格式: aconst_null 功能描述: null进栈。 指令执行前 指令执行后 栈底 ... ... null 栈顶 注意:JVM并没有为null指派一个具体的值。 0x02 iconst_m1 int型常量值-1进栈 0x03 iconst_0 int型常量值0进栈 0x04 iconst_1 int型常量值1进栈 0x05 iconst_2 int型常量值2进栈 0x06 iconst_3 int型常量值3进栈 0x07 iconst_4 int型常量值4进栈 0x08 iconst_5 int型常量值5进栈 0x09 lconst_0 long型常量值0进栈 0x0A lconst_1 long型常量值1进栈 0x0B fconst_0 float型常量值0进栈 0x0C fconst_1 float型常量值1进栈 0x0D fconst_2 float型常量值2进栈 0x0E dconst_0 double型常量值0进栈 0x0F dconst_1 double型常量值1进栈 0x10 bipush 将一个byte型常量值推送至栈顶 0x11 sipush 将一个short型常量值推送至栈顶 0x12

C语言博客作业04--数组

送分小仙女□ 提交于 2019-12-04 18:54:55
0.展示PTA总分 1.本章学习总结 1.1 学习内容总结 1.数组是最基本的构造类型,是一组相同类型数据的有序集合。 2.在程序中使用数组,可以让一批相同类型的变量使用同一个数组变量名,用下标相互区分。 3.数组的优点是表达简洁,可读性好便于使用循环结构。 4.定义一个数组,需要明确数组变量名,数组元素的类型和数组的大小(即数组中元素的数量)。 5.一维数组定义的一般形式为: 类型名指定数组中每个元素的类型; 数组名是数组变量(以下简称数组)的名称,是一个合法的标识符; 数组长度是一个整型常量表达式,设定数组的大小。 6.数组是一些具有相同类型的数据的集合,数组中的数据按照一定的顺序排列存放。同一数组中的每个元素都具有相同的数据类型,有统一的标识符即数组名,用不同的序号即下标来区分数组中的各元素。 7.在定义数组之后,系统根据数组中元素的类型及个数在内存中分配了一段连续的存储单元用于存放数组中的各个元素,并对这些单元进行连续编号,即下标,以区分不同的单元。每个单元所需的字节数由数组定义时给定的类型来确定。只要知道了数组第一个元素的地址以及每个元素所需的字节数,其余各个元素的存储地址均可计算得到。 8.C语言规定,数组名表示该数组所分配连续内存空间中第一个单元的地址,即首地址。由于数组空间一经分配之后在运行过程中不会改变,因此数组名是一个地址常量,不允许修改。数组名是一个地址常量

C语言博客作业--数组

非 Y 不嫁゛ 提交于 2019-12-04 18:51:21
展现PTA总分 本章学习内容总结 一维数组 1.定义:一维数组的定义一般形式是: 类型名指定数组中每个元素的类型 数组名是数组变量的名称 注:数组长度是一个常量 数组名是一个地址常量,存放数组内存空间的首地址。 2.引用 定义数组后,就可以使用了。C语言规定,一次引用整个数组。数组元素的引用要指定下标,形式为: 下标可以是数型表达式。它的合理取值范围是[0,数组长度-1] 这些数在内存中按下标递增的顺序连续存储 数组下标从0开始, 下标不能越界。 数组元素的使用方法与同类型的变量完全相同。 请读者注意区分数组的定义和数组元素的引用,两者都要用到“数组[整型表达式]”。定义数组时,方括号内是常量表达式,代表数组长度,它可以包号常量,但不能包含变量。也就是说,数组的长度在定义时必须指定,在程中是不能改变的。而引用数组元素时,方括号内是表达式,代表下标,是变量。 一维数组的初始化 一般形式: 二维数组 定义和引用 1.定义 二维数组的定义形式为: 2.引用 引用二维数组的元素要指定两个下标,即行下标和列下标,形式为: 行下标的合理取值范围是[0,行长度-1],列下标的合理取值范围是[0, 列长度-1]。 二维数组的元素在内存中按行/列方式存放,即先存放第0行的元素,再存放第1行的元素....其中每一行的元素再按照列的顺序存放 来源: https://www.cnblogs.com

堆(Heap)

匿名 (未验证) 提交于 2019-12-03 00:11:01
下标关系 已知双亲(parent)的下标,则: 左孩子(left)下标 = 2 parent + 1; 右孩子(right)下标 = 2 parent + 2; 已知孩子(不区分左右)(child)下标,则: 双亲(parent)下标 = (child - 1) / 2 堆(heap) 定义: 堆逻辑上是一棵完全二叉树 堆物理上是保存在数组中 满足任意结点的值都大于其子树中结点的值,叫做大堆,或者大根堆, 或者最大堆 反之,则是小堆,或 者小根堆,或者最小堆 堆的基本作用是,快速找集合中的最值。 向下调整: 时间复杂度:O(log(n)) 前提:左右子树必须已经是一个堆,才能调整。 说明: array 代表存储堆的数组 size 代表数组中被视为堆数据的个数 index 代表要调整位置的下标 left 代表 index 左孩子下标 right 代表 index 右孩子下标 min 代表 index 的最小值孩子的下标 过程(以小堆为例): index 如果已经是叶子结点,则整个调整过程结束 判断 index 位置有没有孩子 因为堆是完全二叉树,没有左孩子就一定没有右孩子,所以判断是否有左孩子 因为堆的存储结构是数组,所以判断是否有左孩子即判断左孩子下标是否越界,即 left >= size 越界 确定 left 或 right,谁是 index 的最小孩子 min 如果右孩子不存在