1、概念:同一种类型数据的集合,其实数组就是一个容器。
2、数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素。
3、数组为数组类型,为引用数据类型,前面的格式类型为容器中数据的类型
4、格式1:元素类型[] 数组名 = new 元素类型[元素个数或数组长度]。
int[] arr = new int[5];
5、格式2:元素类型[] 数组名 = new 元素类型[]{元素,元素,元素,元素,元素}
int[] arr = new int[]{3,4,5,6} //静态初始化
int[] arr = {3,4,5,6}
int arr[] = {3,4,5,6} //这个也对,但建议不要这么写
6、范例
(1)、 int[] x = new int[3];
int[] y = x;
y[1] = 1;
则 x[1] 也为 1,引用类型
(2)、 int[] x = new int[3];
int[] y = new int[3];
y[1] = 1;
则 x[1] 还为 0,两个内存空间
(3)、int[] x = new int[3];
System.out.print(x[5]);
编译的时候不会报错,因为只是编译,但是当运行时,会分配内存空间,一使用x[5],就会报异常
java.lang.ArrayIndexOutOfBoundsException 数组脚标越界异常
操作数组时,访问到了数组中不存在的角标
(4)、int[] x = new int[3];
x = null; //此时,x被赋值null,已经不再指向数组了,不是数组
System.out.print(x[5]);
java.lang.NullpointerException空指针异常
运行时,会报空指针异常:当引用没有任何指向值为null的情况,该引用还在用于操作实体。
7、数组操作
数组中有一个属性可以直接获取到数组元素的个数:.length
使用方式:数组名称.length
(1)、获取数组中的元素
int[] arr = new int[3];
arr[1];
(2)、遍历
int[] arr = new int[3];
for(int x=0;x<3;x++){
System.out.println(arr[x]);
}
(3)、length 遍历
int[] arr = new int[3];
for(int x=0;x
System.out.println(arr[x]);
}
(4)、直接print(数组)
会打印出 [1@十六进制 [:表示数组,1:表示类型,@:后面是地址
(5)、获取数组中的最大值
public class Demo{
public static void main(String args[]){
int[] num = new int[]{32,4,35,2,78,45,23,43};
int max = theFunction(num);
System.out.println(“max number is :”max);
}
public static int theFunction(int[] num){
int max = num[0];
for(int x=0;x
max = max
}
return max;
}
}
(6)、数组选择排序法
public static void theFunction(int[] num){
int temp = 0;
for(int x=0;x
for(int y=x+1;y
if(num[x]>num[y]){
temp = num[x];
num[x] = num[y];
num[y] = temp;
}
}
}
(7)、冒泡排序:相邻两个元素进行比较,如果符合条件则换位 //效率低,堆换位慢,希尔排序快
public static void theFunction(int[] num){
int temp = 0;
for(int x=0;x
for(int y=0;y
if(num[y]>num[y+1]){
temp = num[y+1];
num[y+1] = num[y];
num[y] = temp;
}
}
}
}
(8)、java 自带排序
import java.util.*; //引入
Arrays.sort(num);
(9)、数组的查找 //返回 角标,没有找到返回-1,惯例
折半查找法 只针对于有序的数组
(1)、第一种
public static int halfSearch(int[] arr,int key){
int min,max,mid;
min = 0;
max = arr.length-1;
mid = (min+max)/2;
while(arr[mid]!=key){
if(key>arr[mid]){
min = mid + 1;
}else if(key
min = max - 1;
}
if(min>max){
return -1;
}
mid = (min+max)/2;
}
return mid;
}
(2)、第二种
public static int halfSearch(int[] arr,int key){
int min,max,mid;
min = 0;
max = arr.length-1;
while(min<=max){
mid = (min+max)>>1;
if(key>arr[mid]){
min = mid +1;
}else if(key
max = mid - 1;
}else{
return mid;
}
}
return -1;
}
8、进制转换
(1)、十进制 ---》 二进制
public static void toBin(int num){
StringBuffer sb = new StringBuffer();
while(num>0){
sb.append(num%2);
num = num>>1;
}
System.out.print(sb.reverse());
}
(2)、十进制 -----》十六进制
public static void toBin(int num){
StringBuffer sb = new StringBuffer();
for(int x=0;x<8;x++){
int temp = num&15;