黑马程序员-JAVA学习笔记
黑马程序员_java编程基础3_数组
------- android培训、java培训、期待与您交流! ----------
数组:
是存储同一种数据类型的的集合,也叫容器; 特点:是数组中每个元素都有索引从0开始;
数组的定义格式:
数据类型[]数组名=new 数据类型[元素个数]; 数据类型 数组名[]=new 数据类型[元素个数]; 如:
int[] arr=new int[3];int arr[]=new int[3];
数据类型[] 数组名=new 数据类型[]{元素};数据类型[] 数组名={元素}; 如:
int[] arr=new int[]{1,2,3,...}; int[] arr={1,2,3,...};如果元素确定就用这一种;
数组中有一个属性:.length获取数组中的元素个数,即数组的长度;
java中的内存机制:
栈:存储局部变量,一般定义在函数内的变量成为局部变量; 特点:当内存中数据操作完成后,所占空间会自动释放栈内存
堆:是通过new创建的实体都存储在堆内存中; 特点:每一个实体都有内存地址值
实体中的变量都有默认初始化值整型; byte short int long 0;浮点型 float double 0.0;boolean型 false; char型 '\u0000'空字符
实体不在被使用时,会在不定时间内被垃圾回收器回收
方法区:存储方法和静态数据的;
本地方法区: window调用系统资源使用
寄存器: CPU使用
数组种常见问题:
ArrayIndexOutOfBoundsException;访问到了数组中不存在的索引发生
NullPointException; arr没有指向实体,确在操作实体中的数据时
数组的常见操作:
遍历:
class Demo
{
public static void main(String[] args)
{
int[] arr=new arr[5];
for (int x=0;x<arr.length;x++)
{
System.out.println(arr[x]);
}
}
}
获取最值:
//获取最大值
class Demo1
{
public static void main(String[]agrs)
{
int[]arr={1,3,4,9,5,7};//随意定义一个数组
int max=getMax(arr);//接受返回的最大值
System.out.println("max="+max);
}
//定义一个功能获取最大值
public static int getMax(int[]arr)
{
int max=arr[0];//假设arr[0]为最大值
//对数组进行遍历
for (int x=1;x<arr.length;x++)
{ //在遍历过程中比较大小,将大于max的值赋值给max
if (max<arr[x])
{
max=arr[x];
}
}
return max;//返回最大值
}
}
排序:
选择排序:原理:用0索引位置的元素和其他位置的元素进型比较,第一次,最小值出现在0索引位置上
class Demo3
{
public static void main(String[]agrs)
{
int[] arr={1,4,7,2,5,9,6};//随意定义一个数组
selectSort(arr);
for (int i=0;i<arr.length;i++)
{
System.out.print(arr[i]+" ");
}
}
//定义一个排序的功能
public static void selectSort(int[] arr)
{
//遍历数组
for (int i=0;i<arr.length-1;i++)
{
//在编历过程中用前一个元素依次向后比较
for (int x=i+1;x<arr.length;x++)
{
if (arr[i]>arr[x])
{
change(arr,i,x);//调用换位方法
}
}
}
}
//定义一个换位方法
public static void change(int[]arr,int a,int b)
{
int temp=arr[a];
arr[a]=arr[b];
arr[b]=temp;
}
}
冒泡排序:原理:相邻元素两两比较,第一次结束后,最大值出现在最大索引位置。
class Demo3
{
public static void main(String[]agrs)
{
int[] arr={1,4,7,2,5,9,6};//随意定义一个数组
selectSort(arr);
for (int i=0;i<arr.length;i++)
{
System.out.print(arr[i]+" ");
}
}
//定义一个排序的功能
public static void bubbleSort(int[] arr)
{
//遍历数组
for (int i=0;i<arr.length-1;i++)
{
//在编历过程中用前一个元素依次向后比较
for (int x=0;x<arr.length-1-i;x++)
{
if (arr[x]>arr[x+1])
{
change(arr,i,x);//调用换位方法
}
}
}
}
//定义一个换位方法
public static void change(int[]arr,int a,int b)
{
int temp=arr[a];
arr[a]=arr[b];
arr[b]=temp;
}
}
查找:普通查找:任意数组都可以
class Demo4
{
public static void main()
{
int[]arr={1,4,7,3,9,2};
int number=3;
System.out.println(search(arr,number));
}
//定义一个功能实现查找
public static int search(int[]arr,int number)
{
int index=-1;
//遍历数组
for (int i=0;i<arr.length;i++)
{
if(number==arr[i])//比较是否相同
{
index=i;
break;//得到相同的结果,则结束循环
}
}
return index;//有这个数就返回索引,没有就返回-1
}
}
二分查找法:前提是数组要有序;注意:不可以先对数组排序,在进行二分查找
class Demo5
{
public static void main(String[] agrs)
{
int[] arr={1,4,7,2,5,9,6};
int value=5;
int index=binarySearch(arr,value);
System.out.println(index);
}
//定义一个功能实现查找
public static int binarySearch(int[]arr,int value)
{
int min=0;
int max=arr.length-1;
int mid=(min+max)/2;//得到中间索引
//定义循环判断是否相同,不同进行循环
while (arr[mid]!=value)
{
if(arr[mid]>value)
{
max=mid-1;
}
else if (arr[mid]<value)
{
min=mid+1;
}
//如果小的索引大于大的索引,则说明这个数不存在
if (min>max)
{
return -1;
}
mid=(min+max)/2;
}
return mid;
}
}
二维数组:其实是一维数组中的每一个元素是一维数组
二维数组格式: int[][]arr=new int[3][2]; int[][]arr=new int[3][];int[][]arr={{1,4,2},{6,3,4},{5,3}};
二维数组的遍历:
public static void printArray(int[][]arr)
{
for (int i=0;i<arr.length;i++)//遍历外层一维数组
{
for(int x=0;x<arr[i].length;x++)//遍历内层一维数组
{
System.out.println(arr[i][x]+" ");
}
System.out.println();
}
}
注意特殊写法情况:int[]x,y[];int[] x;是一个一维数组; int[] y[];是一个二维数组;
这些都是我们在学习java基础是必学的java数组基础。
------- android培训、java培训、期待与您交流! ---------- 详细请查看:http://edu.csdn.net/heima/