一、数组。
概念:同一种类型的数据的集合。其实数组就是一个容器。
好处:可以自动给数组中的元素从0开始编号,方便操作这些元素。
格式:元素类型[] 数组名= new 元素类型[元素个数或者数组长度]
示例:int[] arr = new int[5]; int 类型数组默认值:0 double默认值:0.0 float默认值:0.0f boolean默认值为false
int[] arr = new int[ ]{1,3,5,7};
int[] arr = {1,5,8,9,9};
arr=null; //可以视为垃圾,不会立刻被清除掉,而是在不定的时间被java的垃圾回收机回收。
注:arr为数组类型 []代表数组
arr代表数据的首地址
//编译只检查语法是否错误
//运行则会出错:
//操作数组时,方位到了数组中不存在的角标就会出现ArrayIndexOutOfBoundsException异常,数组角标越界。
int[] arr = new int[3];
System.out.println(arr[20]);
NullPointerException:空指针异常:当引用没有任何指向值为null的情况,该引用还在用于操作实体。
int[] arr = new int[3];
arr = null;
System.out.println(arr[2]);
二、内存结构。
java 程序运行时,需要在内存中的分配空间,为了提高运算效率,有对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据的方式和内存管理方式。
栈内存:用于存储局部变量,当数据使用完,所占空间会自动释放
堆内存:数组和对象,通过new建立的实例都存放在堆内存中。
每个实体都有内存地址值。
实体中的变量都有默认初始化值。
实体不再被使用,会在不确定的时间内被垃圾回收器回收。
方法区,本地方法区,寄存器。
三、数组的操作。
获取数组中的元素,通常会使用遍历。
int[] arr = new int[]{3,9,5};
for(int i=0; i<3; i++)
{
System.out.println("arr["+i+"]="+arr[i]);
}
int[] arr = new int[]{3,9,5,44};
//数组中有一个属性可以直接获取到数组元素个数,length.
System.out.println(arr.length);
for(int i=0; i<arr.length; i++)
{
System.out.println("arr["+i+"]="+arr[i]);
}
int[] arr = new int[]{3,6,5,1,8,9,67};
System.out.println(arr);
如显示结果为:[I@1542a75
其中[:数组 I:int类型 @ @后面数字是由哈希值,十六进制的 数组实体的引用被打印了,其实就是数组内存存放地址
三、排序【选择和冒泡】
java中已经存在排序的函数和方法。
//(选择排序)通过中间值,排序数组,由小及大。
public static void selectArray(int[] arr)
{
for(int i=0;i<arr.length-1;i++)
{
for(int j=i+1;j<arr.length;j++)
{
int temp;
if(arr[i]>arr[j])
{
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
}
//冒泡排序:相邻的两个元素进行比较,由小及大。
//int[] arr = new int[]{3,1,4,2,7,5};
//arr.length=6 下标最大值为5.
public static void bubbleSort(int[] arr)
{
for(int i=arr.length-1;i>=0;i--)
//for(int i=0;i<arr.length;i++)
{
for(int j=0;j<i;j++)
{
if(arr[j]>arr[j+1])
{
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
//显示数组元素
public static void printArray(int[] arr)
{
System.out.print("[");
for(int i=0;i<arr.length;i++)
{
if(i!=arr.length-1)
System.out.print(arr[i]+",");
else
System.out.print(arr[i]+"]");
}
System.out.println();
}
四、查找
/*
折半的第二种方式。
*/
public static int halfSearch_2(int[] arr,int key)
{
int min = 0,max = arr.length-1,mid;
while(min<=max)
{
mid=(min+max)/2;
if(arr[mid]>key)
min=mid+1;
else if(arr[mid]<key)
max=mid-1;
else
return mid;
}
return -1;
}
/*
折半查找:有序的数组。
*/
public static int halfSearch_1(int[] arr,int key)
{
int min=0;
int max=arr.length-1; //10-1=9;
int mid=(min+max)/2; //5
if(key==arr[mid])
{
return mid;
}
else
{
while(key!=arr[mid])
{
if(key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
if(min>max)
return -1;
mid=(min+max)/2;
}
return mid;
}
}
/*
顺序查找:
定义功能,获取key第一次出现在数组中的位置,如果返回是-1,则代表该key在数组中不存在。
*/
public static int getIndex(int[] arr,int key)
{
for(int i=0; i<arr.length; i++)
{
if(arr[i]==key)
return i;
}
return -1;
}