下标越界

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

随声附和 提交于 2020-03-11 16:49:12
好程序员大数据培训分享实用的大数据之数组 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[]

深入理解ArrayList

此生再无相见时 提交于 2020-03-02 11:31:17
什么是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

手撕ArrayList底层,透彻分析源码

核能气质少年 提交于 2020-02-28 09:01:02
ArrayList概述 Hello大家好,今天就来介绍一下ArrayList,说到ArrayList,很多人都知道它的底层是使用数组实现的,线程不安全的,说到它的特点,都会说查找快,增删慢,因为面试题大家都是这么背过来的。今天就来说说它的底层源码吧。 ArrayList更准确的说是动态数组去实现的,这里使用动态两字,是为了能够充分体现它的特点。 再者就是ArrayList不是线程安全的,所以效率比较高,但是否这个是绝对的呢?答案是否定的 。 ArrayList底层源码 public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{ private static final long serialVersionUID = 8683452581122892189L; private static final int DEFAULT_CAPACITY = 10; private static final Object[] EMPTY_ELEMENTDATA = {}; private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

Java面向对象编程 -6.3

孤街醉人 提交于 2020-02-26 23:58:15
foreach迭代输出 对于数组而言,一般都会使用for循环进行输出,但是在使用传统for循环的时候往往采用下标的形式进行数组元素的访问。 但是在jdk1.5之后为了减轻下标对数组的影响(如果数组下标处理不当,会出现数组越界异常)参考.NET引入了增强型for循环(foreach) 利用foreach的语法结构可以直接自动获取数组中的每一个元素 避免下标访问。 for (数据类型 变量:数组|集合){} 最大的特点在于可以自动将数组中的每一个元素的内容取出保存在变量里面,这样就可以直接通过变量获取数组内容 而避免下标的方式来获取了。 来源: https://www.cnblogs.com/sakura579/p/12369676.html

手撕ArrayList底层,透彻分析源码

蓝咒 提交于 2020-02-26 22:31:47
ArrayList概述 Hello大家好,今天就来介绍一下ArrayList,说到ArrayList,很多人都知道它的底层是使用数组实现的,线程不安全的,说到它的特点,都会说查找快,增删慢,因为面试题大家都是这么背过来的。今天就来说说它的底层源码吧。 ArrayList更准确的说是动态数组去实现的,这里使用动态两字,是为了能够充分体现它的特点。 再者就是ArrayList不是线程安全的,所以效率比较高,但是否这个是绝对的呢?答案是否定的 。 ArrayList底层源码 public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{ private static final long serialVersionUID = 8683452581122892189L; private static final int DEFAULT_CAPACITY = 10; private static final Object[] EMPTY_ELEMENTDATA = {}; private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

python_基础_2

不想你离开。 提交于 2020-02-25 02:04:37
Python 文章目录 Python 1 字符串 str 1.1 字符串运算 1.2 字符串的方法 2 列表 list 2.1 增 2.2 删 2.3 改 2.4 查 2.5 其他方法 3 元组 tuple 3.1 元组的访问 3.2 元组的方法 3.3 删除元组 4 字典 dict 4.1 增 4.2 删 4.3 改 4.4 查 4.5 其他操作 4.6 字典的循环 4.7 字典的嵌套 5 集合 set 5.1 增 5.2 删 5.3 集合的方法 6 基础数据类型的总结 6.1 按存值个数区分 6.2 按可变不可变区分 6.3 按访问顺序区分 6.4 类型转换 Python基础:字符串str & 列表list & 元组tuple & 字典dict & 集合set 1 字符串 str 字符串是以单引号或双引号括起来的任意文本 字符串不可变 创建字符串 str1 = "lee is a good man!" str2 = "lee is a nice man!" str3 = "lee is a handsome man!" 1.1 字符串运算 字符串拼接 str6 = "lee is a " str7 = "good man" str8 = str6 + str7 print("str6 =", str6) print("str7 =", str7) print("str8 =",

C++学习之路——string字符串类具体用法

泄露秘密 提交于 2020-02-13 02:13:26
引言: C++ 大大增强了对字符串的支持,除了可以使用C风格的字符串,还可以使用内置的 string 类。string 类处理起字符串来会方便很多,完全可以代替C语言中的字符数组或字符串指针。 string 是 C++ 中常用的一个类,它非常重要,我们有必要在此单独讲解一下。 定义 使用 string 类需要包含头文件,下面的例子介绍了几种定义 string 变量(对象)的方法: # include <iostream> # include <string> using namespace std ; int main ( ) { string s1 ; string s2 = "c plus plus" ; string s3 = s2 ; string s4 ( 5 , 's' ) ; return 0 ; } 变量 s1 只是定义但没有初始化,编译器会将默认值赋给 s1,默认值是"",也即空字符串。 变量 s2 在定义的同时被初始化为"c plus plus"。与C风格的字符串不同,string 的结尾没有结束标志’\0’。 变量 s3 在定义的时候直接用 s2 进行初始化,因此 s3 的内容也是"c plus plus"。 变量 s4 被初始化为由 5 个’s’字符组成的字符串,也就是"sssss"。 从上面的代码可以看出,string 变量可以直接通过赋值操作符=进行赋值

C/C++数组的下标可以为负

为君一笑 提交于 2020-01-24 03:00:33
今天偶然碰到C/C++的数组下标可以为负值,感到十分奇怪。平时写代码,下标都是从零开始,从来没考虑到这个问题。写了一下测试代码,居然通过了。但是值却是乱的。但是如果你写下标的值在数组的范围内,是可以输出一个正确的值的。 int a[5] = {1,2,3,4,5}; int *ptr1 = (int*)(&a+1); printf("%x,%x,",ptr1[-1]); 1 2 3 4 这个结果就是为5; 后来上网查了一下,也思考了一下,觉得其实挺正常的。数组的下标其实就是数组的头指针在移动,而在C/C++中,编译器是没有对数组进行越界检查的。例如上面的,你输出a[6]也是没错的,只是值是乱的而已。 这个特性其实在开发中几乎用不到,原因就是C/C++的编译器懒。在Java或者OC中,都是报错的。 来源: CSDN 作者: 卖火柴的小男孩2020 链接: https://blog.csdn.net/u014644594/article/details/104008785

大话数据结构系列之静态链表(四)

牧云@^-^@ 提交于 2020-01-23 08:10:07
文章目录 定义 组成 静态链表的插入元素 存在意义 静态链表的优缺点 代码实现( C 、Java ) 定义 组成 让数组的元素都是由两个数据域组成,data 和 cur。 数组的每个下标都对应一个 data 和一个 cur。数据域 data,用来存放数据元素;而游标 cur 相当于单链表中的 next 指针,存放该匀速的后继在数组中的下标。 静态链表的插入元素 例子: 新增元素丙,并插入到下标为3的位置 操作步骤: 在实际数组中是在编号为7的地方直接放置丙元素,数据域的下标置为3 将元素 乙 的数据域下标置为 7,那么在进行遍历时,它会首先找到编号为 7 的丙元素。 然后在依据 丙 元素的数据域下标,找到了编号为 3 的元素丁,如此完成了数据的插入 存在意义 静态链表其实是为了给没有指针的高级语言设计的一种实现单链表能力的方法。 静态链表的优缺点 优点 在插入和删除操作时,只需要修改游标,不需要移动元素,从而改进了顺序存储结构中插入和删除操作需要移动大量元素的缺点。 缺点 没有解决连续存储分配带来的表长难以确定的问题。 失去了顺序存储结构随机存取的特性(及在查询时的时间复杂度为 O[n] ) 代码实现( C 、Java ) C 语言 #include "string.h" #include "ctype.h" #include "stdio.h" #include "stdlib

1060.爱丁顿数 (25分)

泪湿孤枕 提交于 2020-01-19 22:46:23
英国天文学家爱丁顿很喜欢骑车。据说他为了炫耀自己的骑车功力,还定义了一个“爱丁顿数” E ,即满足有 E 天骑车超过 E 英里的最大整数 E。据说爱丁顿自己的 E 等于87。 现给定某人 N 天的骑车距离,请你算出对应的爱丁顿数 E(≤N)。 输入格式: 输入第一行给出一个正整数 N (≤10​5​​),即连续骑车的天数;第二行给出 N 个非负整数,代表每天的骑车距离。 输出格式: 在一行中给出 N 天的爱丁顿数。 输入样例: 10 6 7 6 9 3 10 8 2 7 8 输出样例: 6 思路 首先根据样例降序后为:10 9 8 8 7 7 6 6 3 2 1.用10和10的下标1比较,10 > 1,所以有1天的骑车超过1英里; 2.用9和9的下标2比较,9 > 2,所以有2天的骑车超过2英里(因为10 > 9,9符合,所以10肯定符合,后面同理); 3.用8和8的下标3比较,8 > 3,所以有3天的骑车超过3英里; 4.用8和8的下标4比较,8 > 4,所以有4天的骑车超过4英里; 5.用7和7的下标5比较,7 > 5,所以有5天的骑车超过5英里; 6.用7和7的下标6比较,7 > 6,所以有6天的骑车超过6英里; 7.用6和6的下标7比较,6 > 7不成立,所以最大值E为6。 这里需要注意的是,若全部满足这个条件的话,要检测遍历到数组的结尾就停止,不能越界。 #