局部变量
写在一对大括号({},类除外)里面的变量,称为局部变量。
int[] arr 写在main方法里面 就是局部变量
局部变量存储在栈内存中
在main方法结束以后,该局部变量会立即消失
对象
通过new出来的称之为对象
对象存在堆内存中,使用完以后不会立即消失(被回收)
等垃圾回收器空闲时在合适的时间回收。
在堆里面的数据都有默认的初始化值
整型 0
浮点型 0.0
布尔类型 false
字符 空字符
引用类型(包括String) null
建立关系
对象开辟内存空间并且初始化之后,会把自己空间的地址值给到指向自己的变量(该变量存储在栈内存中)
直接使用数组变量
如果直接输出arr(局部变量),输出的实际是arr指向的对象的地址值(该对象在堆里面的地址值)
操作数组中的每个元素
arr
首先找到栈里面的arr,arr指向的是堆内存中的某个地址。
找到该地址以后,会根据索引找到对应的元素,找到以后可以进行赋值/读取等操作。
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-- |
|