以下是我的学习成果(数组)1. 数组
a 概念:存储多个同一类型数据的容器(内存空间)
b 格式:数据类型[] 变量名;(不推荐:数据类型 变量名[])
c 数组的初始化
数据需要先初始化后使用(变量也是一样)
初始化的工作:
a). 开辟内存空间
b). 为数组中元素赋值
数组初始化方式:
a) 动态初始化(指定数组长度)
b) 静态初始化(不指定数组长度,)
动态初始化就是只给定数组的长度,元素的初始化交给系统默认处理。
动态初始化格式:
数据类型[] 变量名 = new 数据类型[n];
左边:
数据类型 存储在这个数组中元素的类型
[] 表示这是一个数组
变量名 数组的名字
右边:
new 申请内存空间
数据类型 存储在这个数组中元素的类型
[] 表示这是一个数组
n 数组长度,是一个int值
int[] arr = new int[3];
d 数组的使用:直接输出
直接输出数组
[I@1e643faf
[ 表示是数组
[[ 表示是二维数组
I 数组中元素的类型
1e643faf 通过地址等信息算出来的一个数值(十六进制hash值)
[Ljava.lang.String;@6e8dacdf
[ 表示是数组
[[ 表示是二维数组
L 数组中元素的类型是引用数据类型
java.lang.String; 数组中元素的类型(完整类名)
6e8dacdf 通过地址等信息算出来的一个数值(十六进制hash值)
特例:char[] 直接输出char[],结果与上面的不同,会输出一个字符串,字符串内容是字符数组中的内容拼接而成
e 数组的使用:输出/获取数组中的每一个元素
索引:索引就是一个整型的编号,用来获取数组中的每一个元素
索引的使用方法/数组中元素的获取方法:
数组名[索引]
索引特性:
1. 从0开始的整数
2. 连续
3. 索引每次递增1
int数组中元素的默认值都是0
f 内存图解1
左面的内存区域是 栈内存
右面的内存区域是 堆内存
局部变量
写在一对大括号({},类除外)里面的变量,称为局部变量。
int[] arr 写在main方法里面 就是局部变量
局部变量存储在栈内存中
在main方法结束以后,该局部变量会立即消失
对象
通过new出来的称之为对象
对象存在堆内存中,使用完以后不会立即消失(被回收)
等垃圾回收器空闲时在合适的时间回收。
在堆里面的数据都有默认的初始化值
整型 0
浮点型 0.0
布尔类型 false
字符 空字符
引用类型(包括String) null
建立关系
对象开辟内存空间并且初始化之后,会把自己空间的地址值给到指向自己的变量(该变量存储在栈内存中)
直接使用数组变量
如果直接输出arr(局部变量),输出的实际是arr指向的对象的地址值(该对象在堆里面的地址值)
操作数组中的每个元素
arr[i]
首先找到栈里面的arr,arr指向的是堆内存中的某个地址。
找到该地址以后,会根据索引[i]找到对应的元素,找到以后可以进行赋值/读取等操作。
g 内存图解2
两个不同的int数组类型的变量,指向了同一个int数组对象
通过任意一个变量,均可操作数组对象内的元素。
2. 数组大厂面试题实战(百度)
在一个数组中,某一个元素出现的次数>length/2,请用程序获取数组中的该数字。
{1,2,6,1,5,1,3,1,1}
1. 遍历数组,统计每个元素出现的次数,如果某个元素出现次数大于长度的一半。
2. 排序
从小到大排序 结果是 1 1 1 1 1 2 3 5 6 6 5 3 2 1 1 1 1 1
1 1 1 1 1 3 5 6 6 5 3 1 1 1 1 1
对数组进行排序,获取数组中索引为length/2的元素,即为该数字
3. 火拼
1 1 1 1 1 3 5 6
{1,6,1,1,1,3,1,5}
第一个元素上场前
场上目前胜利的帮派/某个值winner = 0;
场上有的人数/元素数量count = 0;
第一元素1上场后
winner = 1;
count = 1;
第二个元素6上场后
winner = 0;
count = 0;
第三元素1上场后
winner = 1;
count = 1;
第四个元素1上场后
winner = 1;
count = 2;
……
上场 看count == 0
是 winer = 自己
count++
否
看是不是自己人
是winner==自己
count++
//winer=自己
否 count--
|
|