---------------------- android培训、java培训、期待与您交流! ----------------------
这两天老有人感冒,阴晴冷暖还是得多注意身体,身体是革命的本钱,好的身体才能保证这个好的学习状态。另外还有个两个问题需要回答一下:
1.关于有些学员说在教室没有兴趣学习,想回家看视频来复习。
a) 原则上我不希望出现这种问题,这样太浪费时间了。如果真的自律性强的话,那直接将视频拷贝回家,又何必来上课呢?还不是因为回了家以后没有学习的动力,没有学习的氛围,一直毫无目的的啃着视频来看,这个多浪费时间啊?在教室来说,虽然环境不是很好,但是至少在你看到旁边的人在学习时你也不会再那儿再玩游戏。
b) 再有关于蒙圈的事,很多人都开始感觉到有些吃力,重要的是掌握今天所讲的主线,至于其他的做为了解就好了。还是那句话:写代码前一定要有思路,有目的的去写,不要写了半天还不知道实现什么功能,每一行是什么意思。那就悲催了。如果真的出现蒙圈现象,告诉我在那块儿懵了,这个问题的解决刻不容缓。希望引起大家伙儿的注意。
2. 关于二维数组打印输出的数据:
int[][] arr = new int[3][];
System.out.println(arr[2]);
arr = new int[3][2];
System.out.println(arr[2]);
输出的结果:
Null,[I@de6ced。
问题一:为何输出null?
内存图解:
问题二:输出为啥是[I@de6ced,这又是个神马浮云?
先看内存结构图:
关于这个的话,我们只需要记住@前边的东西,因为后边是一个哈希值。[代表的是它的类型,代表的是一个数组类型的,I代表的是数组中存放的数据
哦了,下边复写一下所学的知识点吧:
1. 内存结构分布:
2. 内存中堆栈的特点:
3. 局部变量在内存中的位置
4. 基本数据类型和引用数据类型在内存中分布的区别?
5. 多维数组
好了,接下来开始简单介绍吧:
内存结构分布:
主要分为五部分:寄存器,本地方法区,方法区,栈,堆。
主要涉及到:方法区,栈,堆。
分析:
寄存器:一般是CPU处理数据的区域;
本地方法区:系统加载底层资源的区域;
方法区:一般加载类或者是常量的区域。
栈:一般用来存储局部变量
堆:一般用来存储创建的对象
内存中堆栈的特点:
栈:用于存储局部变量,当数据使用完,所占空间会自动释放。
堆:数组和对象,通过new建立的实例都存放在堆内存中。
每一个实体都有内存地址值
实体中的变量都有默认初始化值
实体不在被使用,会在不确定的时间内被垃圾回收器回收
多维数组
数组中的每一个元素都是数组,这样的数组就是多维数组。
int[][] arr = { { 1,2, 3 }, { 4, 5 }, { 6, 7, 8, 9 } };
定义二维数组arr, 其中有三个元素都是数组, 第一个数组3个元素, 第二个2个元素, 第三个4个元素.
int[][] arr = new int[][] { { 1, 2, 3 }, { 4, 5 }, { 6, 7, 8, 9 } };
定义二维数组arr, 其中有三个元素都是数组, 第一个数组3个元素, 第二个2个元素, 第三个4个元素.
int[][] arr = new int[3][3];
定义二维数组arr, 其中有三个元素都是数组, 每个小数组都是3个元素.
int[][] arr = new int[3][];
定义二维数组arr, 其中有三个元素都是数组, 每个小数组元素个数不确定.
练习
6. * 打印数组中所有内容成一行
int[] arr= new int[];
for(int i=0;i<arr.lengh;i++){
System.out.print(arr[i]);
}
7. * 交换数组的两元素
int[] arr= {12,34};
int temp= arr[0];
arr[0]=arr[1];
arr[1]=temp;
8. * 反转数组的元素
int[] arr = {12,34,56,67,89,97,99};
int[] temp = new int[arr.length];
int j =0;
//打印源数据
printInfo(arr);
System.out.println();
for(int i=arr.length-1;i>=0;i--){
temp[j]=arr[i];
j++;
}
printInfo(temp);
public static void printInfo(int[] temp) {
System.out.print("[");
for (int i= 0; i < temp.length; i++) {
if(i<temp.length-2){
System.out.print(temp[i]+",");
}else if(i==temp.length-1){
System.out.print(temp[i]+"]");
}
}
}
9. 排序
冒泡排序:
选择排序
10. 查找(折半查找)
11. .数组相关的工具方法
Arrays.toString() 将数组转为字符串形式
System.arraycopy() 拷贝数组中的一部分到另一个数组中
import java.util.*;
/*
面试题:
给定一个有序的数组,如果往该数组中存储一个元素,并保证这个数组还是有序的,
那么个元素的存储的角标为如何获取。
{13,15,19,28,33,45,78,106};
*/
class ArrayDemo5
{
public staticvoid main(String[] args)
{
//
// int[] arr ={4,1,8,7,3,8,2};
int[] arr ={13,15,19,28,33,45,78,106};
int index = halfSearch_2(arr,5);
System.out.println("index="+index);
int index1 =Arrays.binarySearch(arr,5);//如果存在返回的具体的角标位置,不存在返回的是 -插入点-1
System.out.println("index1="+index1);
}
/*
二分查找法。
*/
public staticint halfSearch(int[] arr,int key)
{
intmax,min,mid;
min = 0;
max =arr.length-1;
mid =(max+min)/2;
while(arr[mid]!=key)
{
if(key>arr[mid])
min =mid + 1;
elseif(key<arr[mid])
max =mid - 1;
if(max<min)
return-1;
mid =(max+min)/2;
}
return mid;
}
public staticint halfSearch_2(int[] arr,int key)
{
intmax,min,mid;
min = 0;
max =arr.length-1;
while(min<=max)
{
mid =(max+min)>>1;
if(key>arr[mid])
min =mid + 1;
elseif(key<arr[mid])
max =mid - 1;
else
returnmid;
}
return-min-1;
}
/*
数组常见功能:查找。
*/
public staticint getIndex(int[] arr,int key)
{
for(int x=0;x<arr.length; x++)
{
if(arr[x]==key)
returnx;
}
return -1;
}
}
---------------------- android培训、java培训、期待与您交流! ----------------------